home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
vol_200
/
220_01
/
boss_doc.lzh
/
BOSS.MAN
next >
Wrap
Text File
|
1991-01-14
|
323KB
|
10,671 lines
The Window BOSS
&
Data Clerk
Revision 01.07.91
Version 6.01
Star Guidance Consulting, Inc.
273 Windy Drive
Waterbury, Connecticut 06705
(203) 574-2449
_______
____|__ | (tm)
--| | |-------------------
| ____|__ | Association of
| | |_| Shareware
|__| o | Professionals
-----| | |---------------------
|___|___| MEMBER
Copyright (c) 1984-1991 by Philip A. Mongelluzzo
All Rights Reserved.
The Window BOSS Shareware diskette, containing a copy of this
manual may be freely copied and shared, but printed copies of
this document may not be copied in any way without permission in
writing from Star Guidance Consulting. Thank you.
The Window BOSS
1. Introduction
The Window BOSS is one of the most powerful and cost-effective
products available to enhance and accelerate the development of
system and applications programs in the "C" language. The BOSS
will let you create programs that have the same look and feel as
top sellers like Lotus 1-2-3, Sidekick, dBASE III, and Framework!
Pop-up windows, pull down menus, status lines, and in context on-
line help functions can be easily implemented. Your applications
can drag windows around the screen and automatically sense the
video card installed. All of this without snow, flicker, or
delay!
The BOSS's assistant, The Data Clerk is always on call to handle
the tasks associated with data entry. Whether they be as simple
as fetching a line of text or as complicated as the coordination
of filling out a form, the Data Clerk will be there to assist,
and if necessary, validate precious information as it is entered.
Registered users can take advantage of our "Source Plus" policy
that provides meticulously commented source code, technical
support, and minimal fee updates.
2. Technical Nitty Gritties
The Window BOSS supports PC/MSDOS for the IBM PC/XT/AT, PS/2 and
compatibles. However, you'll need one of the following
compilers in order to take advantage of the state-of-the-art
techniques available from the BOSS:
Watcom C & Express C, TopSpeed C
Microsoft C & Quick C, Borland Turboc C & C++
Computer Innovations CI86, Datalight C
Mix Power C, Zortech C++, Aztec C
The BOSS is written in "C" and assembly language. You'll need
the Microsoft Assembler, MASM, to assemble any local changes to
the assembler source.
Stats:
Maximum windows: limited only by compiler and memory
Maximum window: full screen (25x80, 43x80, 50x80)
Minimum window: 1 row 1 column (borderless)
3 rows 3 columns (framed)
Minimum fields: none
Maximum fields: limited only by compiler and memory
Operation:
Simply include the library at link time and invoke the
function desired.
Page: 1
The Window BOSS
3. User Supported Software
Star Guidance Consulting distributes The Window BOSS with a
unique marketing approach called Shareware. The Shareware
diskette and its programs and manual may be freely copied and
shared. It is also available from Star Guidance for $20.00. We
ask you to help us distribute The Window BOSS by sharing
unmodified copies of the Shareware diskette with others. We also
encourage you to register your copy for $55.00. You'll find a
registration form at the end of this manual. Thank you for your
support and enjoy the BOSS.
3.1. Registering
Shareware is a term for software that can be freely copied and
shared. The term describes copyrighted software which the author
supports and encourages people to copy and share.
Shareware is like public television: the programming is freely
distributed, but support from users is encouraged. The concept
is based on these principles:
1. People need to try programs to see if they are useful.
2. Software authors can be supported directly by users.
3. Copying and networking of programs can be encouraged.
We encourage you to register your copy of The Window BOSS for
$55.00. Registration has a number of benefits to you:
1. Serialized diskette containing all source code for all
supported compilers.
2. Telephone Support and minimal fee updates. Minimal fees
cover the cost of media, packaging materials, shipping,
handling, and update preparation.
3. Thanks from us for your support and encouragement!
3.2. Support Services
You may call, write, or use one of the supported commercial
services (CompuServe, GENIE, BIX) to obtain support and
assistance. Unless the problem is relatively complex, you will
get the best results by calling. Electronic mailboxes are checked
on daily basis (excluding weekends & holidays) and are a very
effective way of communicating. Electronic mailboxes are great
for passing problem code samples and receiving work-arounds
and/or problem specific updates. If you write, please include a
phone number and the times when you will be available. Our
response to written questions is much slower, but we do give
priority to overseas users. We are available between 9AM and 5PM
Monday through Friday, and sometimes on Saturday and Sunday.
Page: 2
The Window BOSS
Support Services - continued.
With reference to calls, if we do not call back, please remember
that about 20% of our call backs do not get completed because of
faulty phone numbers, unanswered, or busy phones. If we have not
called back within 1 business day, call us again. Frequent,
difficult to reach, or foreign callers can expect "person to
person" collect return calls.
3.2.1. Electronic Support
Electronic support is provided on GENIE, CompuServe, and BIX.
Support previously provided by our BBS is now provided on these
services. You are strongly advised to obtain a USER ID on at
least one of these fine services as no other form of electronic
support can be provided.
On GENIE, a special topic on the IBM PC Round Table Bulletin
Board has been set up to provide support to Window BOSS users.
The Window BOSS topic can be found in the "On-Line Product
Support" category of the Bulletin Board. As of this writing,
the IBM PC Round Table main menu is page 615 and the "On-Line
Product Support" category is category # 30 of the Round Table's
Bulletin Board. Simply move to page 615 by typing "M 615",
select the IBM PC Round Table Bulletin Board from the menu by
typing "1", then SET the category by typing "SET 30". Reading
and entering messages is straight forward. The on-line help
system and GENIE's user guide should assist you if you have
questions. If you prefer, you can leave mail addressed to
MONGELLUZZO. Round Table and Mail messages are answered on a
daily basis. If you need information on obtaining a GENIE
account you can call GENIE toll free at 800-638-9636.
CompuServe electronic correspondence is limited to EMAIL. Our
EMAIL ID is [71565,1001]. SIG(s) are also occasionally checked
for messages but should not be considered a vehicle for effective
communication to Star Guidance. If you are a CompuServe user and
you need to reach us, use EMAIL. EMAIL messages are answered on
a daily basis. If you need information on obtaining a CompuServe
account you can call CompuServe toll free at 800-848-8199.
BIX electronic correspondence is limited to Electronic Mail. Our
BIX NAME is "pmongelluzzo". The conference areas in the
"ibm.exchange" are also occasionally checked for messages but
should not be considered a vehicle for effective communication to
Star Guidance. If you are a BIX user and you need to reach us,
use EMAIL. EMAIL messages are answered on a daily basis. If you
need information on BIX can reach them at 800-227-2983 (in
New Hampshire and outside the United States call 603-924-2983).
Page: 3
The Window BOSS
4. The Basics
The Window BOSS is an extensive library of C functions for the
creation, the management and the manipulation of text windows.
We take care of all the housekeeping and let you, the programmer,
get on with developing your application with a minimum of fuss.
Both The Window BOSS and The Data Clerk are based on a layered
software design in which powerful, easy to use functions are
created from a series of lower level primitives. As a
programmer, you will quickly appreciate our clean and uncluttered
approach to getting the job done.
Windows are created and defined by opening them. Once created,
you can write to them, move them around, change their attributes,
use them as the basis for data entry, or "kill" them by closing
them. Windows are nothing more than a sub display of a larger
display - the physical screen. They are defined to have size,
location, and attributes like foreground color, background color,
border colors and so on. The BOSS includes a whole host of
functions for defining and manipulating your windows.
Windows can also serve as the backdrop for data entry. Once a
window is created, you can use it to convey information or to
retrieve it! The Data Clerk will assist you in obtaining the
desired goal, whether it be as simple as a single line of text or
as complex as a complete form.
Forms are an ordered collection of input requests (fields) that
occur within a specific window. Fields have size, location
(relative to the window which they will be displayed in), and
attributes (foreground color, background color, mask values, fill
characters, type [integer, float, long, text], validation
ranges and so on). Like windows, forms are created by opening
them. Their contents must then be defined by using the field
definition functions provided, or with your own custom field
definition functions. Once created and defined, a form becomes
part of the window and moves with it. Forms are "killed" by
closing them (n.b. killing a form has no effect on the window to
which it was anchored or to the information displayed in it, form
or otherwise). The same functions used to input single data items
are used to build forms. This consistency, coupled with an
uncluttered approach and flexibility, gives The Window BOSS its
power.
Page: 4
The Window BOSS
4.1. Window Basics
Here is the famous "hello" program! As you can see it's pretty
simple to get windows into your applications with The Window
BOSS!! You should review this code in conjunction with the
function descriptions found in this manual and the concepts
outlined in the Important Concepts section following the
examples.
#include "windows.h" /* REQUIRED */
main()
{
WINDOWPTR w1; /* window handle */
int batrib; /* border atrib */
int watrib; /* window atrib */
/*
* Set attributes:
*
* border - blue/white box
* window - white background/black letters
*
*/
batrib = (BLUE << 4) | WHITE; /* border atrib */
watrib = (WHITE <<4) | BLACK; /* window atrib */
/*
* Open window at 0,0 - 25 cells wide and 10 cells high
*/
w1 = wn_open(0,0,0,25,10,watrib,batrib);
if(!w1) exit();
/*
* Print the famous string and wait for key to be struck.
* Close window on key strike.. exit.
*/
wn_printf(w1,"Hello World...");
v_getch(); /* wait for key */
wn_close(w1); /* close the window */
exit(0); /* and exit */
}
/* End */
Page: 5
The Window BOSS
4.2. Data Entry Basics
Lets expand our "hello" program to prompt and fetch a name.
#include "windows.h" /* REQUIRED */
main()
{
WINDOWPTR w1; /* window handle */
int batrib; /* border atrib */
int watrib; /* window atrib */
char name[15]; /* name */
/*
* Set attributes:
*
* border - blue/white box
* window - white background/black letters
*
*/
batrib = (BLUE << 4) | WHITE; /* border atrib */
watrib = (WHITE <<4) | BLACK; /* window atrib */
/*
* Open window at 0,0 - 25 cells wide and 10 cells high
*/
w1 = wn_open(0,0,0,25,10,watrib,batrib);
if(!w1) exit();
/*
* Print the famous string, prompt and fetch a name,
* wait for key to be struck.
* Close window on key strike.. exit.
*/
wn_printf(w1,"Hello World...");
*name = NUL; /* init buffer for name */
wn_gtext(XEQ,NFRM,NFLD,w1,2,1,"Name: ",watrib,'_',15,name,NSTR,NSTR);
v_getch(); /* wait for key */
wn_close(w1); /* close the window */
exit(0); /* and exit */
}
/* End */
Page: 6
The Window BOSS
4.3. Form Basics
Now we will expand a bit further to read a 2 field form.
#include "windows.h" /* REQUIRED */
main()
{
WINDOWPTR w1; /* window handle */
WIFORM f1; /* form handle */
int batrib; /* border atrib */
int watrib; /* window atrib */
char name[15]; /* name */
char city[15]; /* city */
/*
* Set attributes:
*
* border - blue/white box
* window - white background/black letters
*
*/
batrib = (BLUE << 4) | WHITE; /* border atrib */
watrib = (WHITE <<4) | BLACK; /* window atrib */
/*
* Open window at 0,0 - 25 cells wide and 10 cells high
*/
w1 = wn_open(0,0,0,25,10,watrib,batrib);
if(!w1) exit();
/*
* Print the famous string, create, define, and fetch form
* wait for key to be struck.
* Close window on key strike.. exit.
*/
wn_printf(w1,"Hello World...");
*name = NUL; /* init buffer for name */
*city = NUL; /* init buffer for city */
f1 = wn_frmopn(3); /* open form 2 + 1 Fields */
wn_gtext(SET,f1,0,w1,2,1,"Name: ",watrib,'_',15,name,NSTR,NSTR);
wn_gtext(SET,f1,1,w1,3,1,"City: ",watrib,'_',15,city,NSTR,NSTR);
wn_frmget(f1); /* read the form */
v_getch(); /* wait for key */
wn_frmcls(f1); /* first close the form */
wn_close(w1); /* then close the window */
exit(0); /* and exit */
}
Page: 7
The Window BOSS
4.4. Popup Menu Basics
Popup and pulldown menus add that extra sparkle to your
applications. The Window BOSS includes a simple popup menu
system that is fast and easy to use. The system consists of two
functions; wn_popup() and wn_qpopup(). wn_popup() is an
interactive version of wn_qpopup(). That is to say that
wn_popup() can be used to solicit user input while wn_qpopup is a
*information only* popup. The "q" in qpopup stands for 'quick'.
Both functions have function parameters and require the menu
structure "pmenu" to be initialized. "pmenu" is defined in
"windows.h".
Popup menus, like windows, have size (height & width), an origin
(row & column), and attributes (text & border). These are passed
as parameters to both wn_popup and wn_qpopup in the same fashion
as they would be for a call to wn_open. In addition to the
normal window stuff, popup menus also have information that needs
to be displayed and, in some cases, information that needs to be
returned, to the calling function. This additional information
is passed to popup via the pmenu structure. The pmenu structure
allows us to tell wn_popup what text is to be displayed where,
and what value (return code), if any, is to be provided back to
the calling function.
Both wn_popup and wn_qpopup call wn_open to open a window defined
by the calling parameters. Calls to wn_putsa are then made to
display the text defined in pmenu within the window just opened
at the location in the window specified by the values defined in
pmenu. A menu item is highlighted by moving either the cursor
keys, space bar, or by pressing the first character of the menu
item desired. Control is passed back to the calling function
when the 'Enter' or 'Escape' key is pressed. Here is a typical
call to wn_popup:
wat = (WHITE<<4|BLACK);
bat = (BLUE<<4|WHITE);
rv = wn_popup(0, 0, 0, 33, 14, wat, bat, &intelc, FALSE);
| | | | | |
+-------\/--------------+ | | | |
Normal wn_open parms | | | |
| | | |
pmenu structure <-+-----+ | |
| |
window close flag <-+---+
The normal wn_open parameters define the popup menu's location,
size, and color. The pmenu structure address allows wn_popup and
wn_qpopup to access the contents of the intelc pmenu structure.
The window close flag is used to tell wn_popup whether or not to
close the popup menu when returning to the calling function.
Telling wn_popup not to close the menu when returning to the
calling function allows you to create nested popups.
Page: 8
The Window BOSS
Popup Menu Basics - continued.
Lets examine the pmenu structure definition from windows.h:
struct mitem { /* POPUP menu item template */
int r; /* row */
int c; /* col */
char *t; /* text */
int rv; /* return value */
};
struct pmenu { /* POPUP menu structure */
WINDOWPTR wpsave; /* place to hold window id */
int winopn; /* leave window open flag */
int lndx; /* last index */
int fm; /* first menu item index */
int lm; /* last menu item index */
struct mitem scrn[WN_MXROWS*4]; /* a bunch of menu items */
}; /* NOTE RELATIVE LIMIT */
mitem - Popup menus contain a number of menu items. Each menu
item has a location (within the window), text (to be displayed
in the window), and an integer return code that is passed back
to the calling function to let the caller know which menu item
was selected. "r" and "c" define the row and column, "t" is a
pointer to the text, and rv is integer return code.
pmenu - In addition to the information needed about each menu
item, we need to do some internal housekeeping on the popup
menu itself. "wpsave" is used to store the WINDOWPTR that was
returned from the call to wn_open made by popup. "winopn" is
used internally by popup as an indicator of whether or not the
window referenced by wpsave is currently open. "lndx" is used
internally to hold the index of the menu item last referenced
or selected. The combination of "wpsave", "winopn", and "lndx"
provide wn_popup with the ability to correctly handle both
nested and non-nested popups. The structure members "wpsave",
"winopn", "lndx" should not be modified, only initialized.
Page: 9
The Window BOSS
Popup Menu Basics - continued.
The Window BOSS's popup menus allow you to have informational
headers and trailers. This is handy for providing multiple
line titles and or trailing instructional messages. Consider
the following:
+---------------------------------+
| |
| Intellicom | <- Informational
| Quick - Help | <- Informational
| |
| 1 General Information | <- Action item
| 2 Terminal Mode Options | <- Action item
| 3 XMODEM File Send | <- Action item
| 4 XMODEM File Receive | <- Action item
| 5 CompuServe Exec Mode | <- Action item
| |
| Press: ESC to quit or Cursor | <- Informational
| Keys to Position Cursor then | <- Informational
| press RETURN for MORE info. | <- Informational
| |
+---------------------------------+
In the above popup there are 10 menu items, 5 are action
oriented, and 5 are informational. They are numbered 0 through
9 and correspond to the "scrn" array of pointers in the pmenu
structure. "fm" and "lm" are the indexes of the first and last
action items in scrn array. In the case of the above popup, fm
and lm would be initialized to 2 and 6 respectively. "fm" and
"lm", like the other housekeeping structure members, should not
be modified, only initialized. The pmenu structure for this
popup is as follows:
static struct pmenu intelc = {
0, FALSE, 0, /* wpsave, winopn, lndx */
2, 6, { /* fm, lm */
1, 2, " Intellicom", 0, /** ----- **/
2, 2, " Quick - Help", 0, /* | */
4, 5, "1 General Information ", 1, /* | */
5, 5, "2 Terminal Mode Options", 2, /* | */
6, 5, "3 XMODEM File Send ", 3, /* 10 menu */
7, 5, "4 XMODEM File Receive ", 4, /* items */
8, 5, "5 CompuServe Exec Mode ", 5, /* */
10, 2, "Press: ESC to quit or Cursor", 0, /* */
11, 2, " Keys to Position Cursor then", 0, /* */
12, 2, " press RETURN for MORE info.", 0, /** ----- **/
99, 99, "",99 } /* ALWAYS ADD THIS LINE */
};
Page: 10
The Window BOSS
Popup Menu Basics - continued.
The end of the pmenu structure is designated by defining a menu
item at row 99, column 99, with null text, with a return code of
99. THIS MUST ALWAYS BE DONE!
Example:
#include "windows.h"
static struct pmenu intelc = {
0, FALSE, 0,
2, 6, {
1, 2, " Intellicom", 0,
2, 2, " Quick - Help", 0,
4, 5, "1 General Information ", 1,
5, 5, "2 Terminal Mode Options", 2,
6, 5, "3 XMODEM File Send ", 3,
7, 5, "4 XMODEM File Receive ", 4,
8, 5, "5 CompuServe Exec Mode ", 5,
10, 2, "Press: ESC to quit or Cursor", 0,
11, 2, " Keys to Position Cursor then", 0,
12, 2, " press RETURN for MORE info.", 0,
99, 99, "",99 }
};
main()
{
WINDOWPTR w1;
int wat, bat, rv;
wn_init();
w1 = wn_open(0,11,1,31,2,NORMAL,NORMAL);
if(!w1) exit(1);
wat = (WHITE<<4|BLACK);
bat = (BLUE<<4|WHITE);
rv = wn_popup(0, 0, 0, 33, 14, wat, bat, &intelc, FALSE);
wn_printf(w1, "wn_popup returned: %d\n",rv);
wn_printf(w1, "Press any key to continue..");
v_getch();
wn_close(w1);
wn_exit();
exit(0);
}
/* End */
To make the popup menu disappear upon return, change the call
to wn_popup to be:
rv = wn_popup(0, 0, 0, 33, 14, wat, bat, &intelc, TRUE);
Page: 11
The Window BOSS
Popup Menu Basics - continued.
The calling sequence and setup of wn_qpopup is similar to
wn_popup but the functions significantly differ operationally.
The parameter list differs in that there is no window close flag
parameter. The operational differences are more significant.
wn_qpopup places the popup window on the screen and then
immediately returns a WINDOWPTR to the open and active popup
window. The calling function assumes full responsibility for
the window from then on (i.e. moving, closing, etc.).
Quick popups are used to display information only and do not
contain action menu items.
Example:
#include "windows.h"
static struct pmenu m1 = {
0, FALSE, 0,
0, 0, {
1, 2, "Presenting", 0,
99, 99, "",99 }
};
main()
{
int wat, bat;
WINDOWPTR w2;
wat = (WHITE<<4|BLACK);
bat = (BLUE<<4|WHITE);
w2 = wn_qpopup(0,0,0,16,3,wat,bat,&m1);
v_getch();
wn_close(w2);
wn_exit();
exit();
}
/* End */
Page: 12
The Window BOSS
Popup Menu Basics - continued.
4.4.1. Notes
Popup menu items are highlighted by moving the cursor bar with
the arrow keys, space bar, or by pressing the first letter/digit
of the menu item. wn_popup will return as soon as the Enter or
Escape key is struck. The return code specified in the pmenu
structure is returned when the Enter key is pressed, Escape
causes return code of 99 to be passed back to the calling
function.
Menu navigation is from the current to next or current to
previous menu item when using the cursor keys or space bar. Item
skipping can only be accomplished by using the "first character"
selection method. Skip selection will only work as anticipated,
if the first character of each action menu item is unique.
Source code is provided (WN_HELP.C) to allow you to customize
and/or enhance the popup menu system to meet your needs.
The BOSSDEMO program contains coding samples showing the use of
wn_popup, wn_qpopup, and how to implement pulldown menus using
wn_popup.
Page: 13
The Window BOSS
4.5. Help System Basics
The Window BOSS includes a file based help system that can be
used to provide your applications with "context sensitive" help.
It would be helpful for you to print out a few pages of
"INTELC.HLP" to refer to during the following discussion. You
should also run the BOSSDEMO program and exercise the Intellicom
Quick Help popup menu. This code uses the help system to produce
the displays when menu selections are made.
The system uses plain ASCII text files you create with your
favorite editor. A special, but easy to follow, file layout is
used. The file layout we have chosen allows the plain ASCII text
files to be indexed using the supplied index generation utility
GENINDEX. The indexing provides the system with the ability to
rapidly locate and display help messages when called upon to do
so. Since the source (WN_HELP.C & GENINDEX.C) to the entire help
system is provided, you can modify it to meet your own needs.
In order to use the help system in your application you must take
two preparatory steps: (1) prepare the ASCII text file in the
specified format and (2) run the GENINDEX program. For example,
you first create a text file called "TAXES.HLP" using Brief,
Vedit, Edlin, or your favorite word processor in non_document
(ASCII) mode and then run the GENINDEX program by:
C> GENINDEX TAXES.HLP
The GENINDEX program reads "TAXES.HLP" and produces "TAXES.NDX".
Both "TAXES.HLP" and "TAXES.NDX" must be available to the
application program at run time.
To actually use the help system in your application you must
first initialize the help system by calling wn_hlinit. This
must be done before any attempt is made to display help messages.
The help system must only be initialized once. The call to
initialize the help system is of the form:
..... /* code */
rv = wn_hlinit(row, col, width, height, atrib, batrib, file)
..... /* code */
The parameters define the location, size, and attributes of the
window in which the help messages will be displayed, along with
the name of the help file to be used. wn_hlinit returns TRUE if
all is well, FALSE otherwise.
Initialization does not cause a window to be displayed, it merely
sets the system up for later use by opening and reading the index
file into memory.
Page: 14
The Window BOSS
Help System Basics - continued.
To initialize the system for full screen help messages in a
window with white letters on blue background and a similar border
using the file "INTELC.HLP", the call to wn_hlinit would be:
wn_hlinit(0,0,78,23,(BLUE<<4|WHITE),(BLUE<<4|WHITE),"intelc");
The help system is now initialized to display full screen help
messages using "INTELC.HLP" and "INTELC.NDX" as the help message
database. (The BOSSDEMO program uses the above code.)
Important - Unless you intend to modify the help system, the
above call to wn_hlinit should always be used - modified only to
reflect the name of your help file.
Obtaining help at run time is accomplished by calling the wn_help
function with a subject key word. For example:
rv = wn_help("%general information%");
Subject key words are located in the ASCII help file you prepare
and are processed by the GENINDEX program. The usage of
wn_help() should be clear once we complete the discussion of the
file layout.
The text file you prepare consists of help system commands,
subject key words, and the actual text to be displayed which is
formatted to fit inside the window defined by wn_hlinit.
Commands
.cp - signals end of page
*END* - signals end of page and end of help for this subject
Text is sequentially displayed one screen at a time from the
subject keyword through any number of .cp delimited screens
through and including the screen delimited by *END*. The
system allows for forward and reverse display via the PgDn and
PgUp keys. The .cp signals the end of a single screen in a
series of 2 or more screens. When .cp is detected the message
"Esc to quit help, PgUp for previous screen, any other key to
continue..." will be displayed. When *END* is detected, the
message "End of help, PgUp for previous screen, any other key
to continue..." is displayed.
Page: 15
The Window BOSS
Help System Basics - continued.
Keywords:
Keywords are always enclosed within percent signs (%) and
signal the beginning of text on a particular subject. They are
used by the GENINDEX program to create the index (NDX) file and
are used by you as parameters to the wn_help() function.
In the case of "INTELC.HLP" you will find the following
keywords:
%ksend%, %ksend1%, %krecv%, %krecv1%, %checksum xmit1%,
%checksum recv1%, %terminal/c1%, %cistty1%, %terminal%,
%terminal/c%, %cistty%, %status%, %dos window%, %exit to dos%,
%close capture%, %autodial%, %ascii xmit%, %checksum xmit%,
%checksum recv%, %general information%, %bossinfo%,
%end-of-file%
Text:
Each screen of text is delimited by either a keyword, the .cp
command, or the *END* command. Text is always formatted to fit
inside the help window. In the case of "INTELC.HLP" there are
two leading spaces and the text is right justified to end at
column 76. The two leading and trailing spaces center the text
between the borders. Blank lines at the top of each screen
(page full) can be used to vertically center the text. Spaces
on the left can be used to horizontally center text.
Important - Unless you intend to modify the help system, the
format defined by "INTELC.HLP" should always be followed for
any help files you create for your own use.
4.5.1. Notes
The help system is configured to provide a full screen text
message, subject keys are limited to 25 characters, and there
is a limit of 255 subject keys per file. This can be changed
by modifying the functions found in "wn_help.c" THERE IS A
DIRECT CORRELATION BETWEEN THE PARAMETERS USED TO INITIALIZE
THE HELP SYSTEM AND THE LAYOUT OF THE ASCII TEXT FILE READ BY
THE GENINDEX PROGRAM. If you modify the code be sure to also
modify location and text of the messages to be displayed when
.cp and/or *END* are detected.
Page: 16
The Window BOSS
Help System Basics - continued.
The GENINDEX program is provided in source form. An EXEcutable
will have to be created locally. You may also have to adjust
the logic to account for the way the various compilers treat
<CR><LF> sequences. This usually amounts to nothing more than
changing the "rb" to "r" in the fopen statement. The best way
to determine if you have built a properly functioning GENINDEX
program is to run your newly created GENINDEX program against
"INTELC.HLP" to create a new "INTELC.NDX". Then rebuild the
BOSSDEMO program and test to see if the Intellicom Quick Help
popup is functioning properly. If it is, you are all set. If
you receive a "Sorry - No info on... " message, then you will
need to edit GENINDEX to make the "rb"/"r" change.
This help system has nothing in common with the way in which
the data entry help and error messages get displayed.
Help files always have a filename extension of "HLP". Index
files always have a filename extension of "NDX".
Page: 17
The Window BOSS
Help System Basics - continued.
Here is a sample program that uses INTELC.HLP.
#include "windows.h"
main()
{
WINDOWPTR w1; /* window handle */
int batrib; /* border atrib */
int watrib; /* window atrib */
wn_init();
batrib = BLUE<<4 | WHITE;
watrib = WHITE<<4 | BLACK;
w1 = wn_open(0,0,0,25,10,watrib,batrib);
if(!w1) exit(1);
wn_hlinit(0,0,78,23,(BLUE<<4|WHITE),(BLUE<<4|WHITE),"intelc");
wn_printf(w1, "Press any key\n"); v_getch();
wn_help("%ksend%");
wn_printf(w1, "Press any key\n"); v_getch();
wn_help("%ksend1%");
wn_printf(w1, "Press any key\n"); v_getch();
wn_help("%krecv%");
wn_printf(w1, "Press any key\n"); v_getch();
wn_help("%krecv1%");
wn_printf(w1, "Press any key\n"); v_getch();
wn_help("%checksum xmit1%");
wn_printf(w1, "Press any key\n"); v_getch();
wn_close(w1);
wn_exit();
exit(0);
}
/* End */
Page: 18
The Window BOSS
4.6. Mouse Basics
The Window BOSS includes a collection of routines that provide
the building blocks for developing applications that incorporate
Mouse support. As a programmer you will need following:
. The mouse and its associated hardware
. The mouse driver software
. C and/or Assembly level functions to communicate with the
mouse
The first two are provided by the mouse manufacturer and must be
installed as outlined in the manufacturer's literature. The last
item is provided as part of The Window BOSS. The Window BOSS's
mouse functions adhere to the de facto Microsoft standard.
However, all of the routines have been extensively tested with
both Microsoft and Logitech mice.
Mouse Communication
The only practical method of communicating with the mouse is
through the mouse device driver, which is accessible via software
interrupt 33H. This interrupt is not used by DOS and is claimed
by the mouse device driver at its invocation. Information is
exchanged between the mouse device driver and calling software
via the standard 8086/88 registers. As a Window BOSS user you
will be pleased to know that the burden of having to deal with
the mouse at this level has been replaced by a collection of "C"
level routines that handle all of the aforementioned setup,
software interrupts and register loading/unloading!!
Mouse Usage
Once the mouse has been initialized (reset), you can show it,
hide it, move it, ask it where it is, check to see if its buttons
have been pressed or released, make it emulate a light pen, put a
cage around it (set its region), define its shape and associated
attribute, or ask it how many buttons it has!
Mouse Functions
The standard Microsoft mouse supports 16 functions. Logitech's
are the same, although some are tweaked a tad to handle the 3rd
button. The Window BOSS provides an easy to use interface to the
low level mouse functions and several higher level functions to
ease your applications level programming.
Page: 19
The Window BOSS
Mouse Basics - continued.
Mouse Functions - continued.
The following table summarizes the 16 Microsoft Mouse Functions:
Function Description Window BOSS Function
0 Initialize mouse mo_reset()
1 Show mouse mo_show()
2 Hide mouse cursor mo_hide()
3 Get position & status mo_pos()
4 Set mouse position mo_move()
5 Get button press info mo_pbinfo()
6 Get button release info mo_rbinfo()
7 Set min/max columns mo_clim()
8 Set min/max rows mo_rlim()
9 * Define graphics pointer mo_sgcursor()
10 Define text pointer mo_scursor()
11 Read motion counters mo_motion()
12 * Define event handler mo_task()
13 Light pen emulation on mo_lpon()
14 Light pen emulation off mo_lpoff()
15 * Set motion pixel ratio mo_ratio()
In addition to the above low level interface routines, the
following application's level functions have been implemented to
ease the mouse's natural display adapter sensitivity. Without
these routines, mouse applications would have to deal with the
mouse in a 640x200-pixel plane - even in text mode!
mo_rcpos() Return current mouse position (row, col)
mo_locate() Locate mouse (row, col)
mo_press() Get button pressed info (button, location..)
mo_release() Get button released info ( " " " " " " " " )
mo_region() Set mouse hot area (row, col, width, height)
mo_setptr() Set mouse pointer (style, attributes)
mo_wait() Wait for mouse to settle (de bouncing logic)
mo_nbut() Return # of buttons on mouse
Most mouse applications will use and generally only need to use:
mo_reset(), mo_show(), mo_hide(), and most or all of the
application level functions.
The low level functions are provided for those who prefer to deal
with the mouse on its 640 x 200 pixel plane.
All of the above supported functions are documented in the
FUNCTION CALL SYNOPSIS section of this manual.
* Interfaces to these functions are provided, but are not
supported, by Star Guidance.
Page: 20
The Window BOSS
Mouse Basics - continued.
Mouse Programming Example (Basic)
#include "windows.h" /* ALWAYS */
main()
{
MOUSEPTR m1; /* my mouse ptr */
int mstat, mclik, mrow, mcol; /* mouse stuff */
int i; /* scratch */
v_cls(NORMAL); /* clear the screen */
v_locate(0,0,0); /* locate the cursor */
m1 = mo_reset(); /* init mouse */
if(m1) { /* mouse exists */
printf("Mouse exists with %d buttons.\n", mo_nbutt(m1));
mo_setptr(m1, 0x1E, NORMAL); /* set mouse pointer style */
mo_reigon(m1, 0, 0, 80, 25); /* set mouse "window" */
mo_show(m1); /* show the critter */
v_locate(0,5,0);
printf("Roll test... move mouse, click left or right to end.\n");
do { /* rolling test */
mo_rcpos(m1, &mstat, &mrow, &mcol);
v_locate(0,6,0);
printf("Mouse @ %03d,%03d", mrow, mcol);
} while (!mstat);
v_cls(NORMAL); /* clear screen */
v_locate(0,0,0); /* home cursor */
mo_hide(m1); /* hide mouse */
m1 = mo_reset(); /* reset mouse */
exit(0); /* finito */
}
else {
printf("NO MICE HERE!!\n"); /* tell of woe... */
exit(0); /* exit */
}
}
/* End */
Page: 21
The Window BOSS
4.7. Important Concepts
The preceding programming examples serve as the foundation for
some fundamental, but very important, concepts.
4.7.1. WINDOWS.H
The Window BOSS requires the file "windows.h" to be included in
any source code files that are going to reference any of the
windowing, data entry, or form control functions. Take the time
to peruse this file as it contains all of the constants and
structures used by both The Window BOSS and Data Clerk.
Also, please note that WINDOWS.H includes other standard compiler
header files.
4.7.2. Window Handles
All windowing functions (any function beginning with "wn_")
either explicitly require an associated window pointer to work,
or assume one already is, or will be, created.
4.7.3. Mouse Handles
All mouse functions (any function beginning with "mo_")
either explicitly require an associated mouse pointer to work,
or assume one already is, or will be, created.
4.7.4. Window Origin
Windows have an origin relative to the upper left hand corner of
the screen which is always row 0, and column 0.
4.7.5. Text and Data Field Origins
Text and data fields have an origin relative to the upper left
hand corner of the window, which is always row 0, column 0.
4.7.6. Attributes
Attributes (foreground/background colors) must be specified for
windows, borders, and data entry fields. Prompts for data entry
fields always have the same attributes as the window. The fields
themselves can have, but do not require, a different attribute
set.
Page: 22
The Window BOSS
4.7.7. Fields and Forms
Fields are defined by calling the field definition functions
(wn_gdate, wn_gtime, wn_gphone, ...) with "SET" as the function
code (1st arg), a valid form handle (2nd arg), a field sequence
number (3rd arg), and the window handle (4th arg) belonging to
the window in which the form is to be displayed. The same
functions that are used to retrieve discrete information can be
combined to create a form when used in conjunction with
wn_frmopn() and wn_frmget(). Note the use of XEQ vs. SET, NFRM
vs. f1, and NFLD in the preceding two program examples. XEQ
stands for "execute now", while SET stands for "set up for later
execution under wn_frmget()".
Forms are anchored to a particular window and must be created by
wn_frmopn() and defined with field definition functions.
Data entry fields can be edited, pre-filled, have validation
ranges, and have both help and error messages associated with
them.
4.7.8. Return Values
Some functions return an indication of success or failure which
you can foolishly ignore, or check to determine what action to
take.
4.7.9. Closing Forms and Windows
Both forms and windows should be closed when they are no longer
needed. Although you can close them in any order, it makes sense
to close all forms associated with a window before closing the
window itself. As a side note - attempting to reference either
forms or windows which have been closed can lead to unpredictable
results.
Page: 23
The Window BOSS
Important Concepts - continued.
4.7.10. Overlapping Windows
The Window BOSS fully supports the concept of overlapping
windows, that is to say that you can have several windows on the
screen at the same time and freely access any one of them without
having to be concerned with the order in which they were opened
or whether or not any other windows overlap the one you wish to
access. The Window BOSS employs the "most recently used is
active" concept. This concept is based on the following:
. The last window referenced is the current active
window.
. The current active window is always the top window.
For example, let us assume that you have opened three overlapping
windows in the following order; w1, w2, w3. w3 is considered to
be the top window because it was the last window referenced. If
you now reference, or explicitly activate w2, The Window BOSS
will automatically adjust the screen image to insure that w2 is
now the top window with w3 and w1 being partially hidden by w2.
Before After
+----------+ +----------+
| W1 | | W1 |
| +----------+ | +----------+
| | W2 | | | W2 |
| | +------------+ | | |----+
| | | W3 | | | | W3 |
| | | | | | | |
| | +------------+ | | |----+
| | | | | |
| +----------+ | +----------+
| | | |
+----------+ +----------+
It is extremely important to keep in mind that The Window BOSS
will automatically activate (bring to the top) the window being
referenced. By keeping your screen layouts attractive and
uncluttered there will be a minimum of window thrashing which is
both annoying and time consuming.
Page: 24
The Window BOSS
Important Concepts - continued.
4.7.11. Functions
The Window BOSS's functions fall into four major groups: those
that manipulate windows, those that deal with data entry, those
that deal with the mouse, and those that deal with the video or
keyboard interface at a relatively low level. All window and
data manipulation functions begin with the prefix "wn_" as in
"wn_open". All mouse functions begin with "mo_" as in
"mo_reset", while all video and keyboard based functions begin
with "v_" or "_" as in "v_getch" and "_putch". This convention
makes it easy to remember where to look when you want to do
something. Additionally, there are several global functions
which begin with "wns_". These functions, although visible to
the outside world, are used internally by The Window BOSS.
So ends the tale of the basics, you are now ready to add sizzle,
bright lights, and artistic touches to all your applications!
Page: 25
The Window BOSS
5. Distribution Methods & Media Kits
The Window BOSS is distributed on 5 1/4" DSDD diskettes. There
are two media kits available: The Shareware diskette kit and The
Source diskette kit. This doucument describes both media kits.
Neither media kit contains ALL of the files listed.
The Shareware diskettes can be freely copied and shared. The
Source diskettes cannot. In either case, you receive a bundled
product -- that is to say, we do not require you to order a
separate media kit for Microsoft, another for Borland, and so on.
All our products include support for all the compilers we
support. This makes moving from one compiler to another child's
play, and it also helps to protect your software development
investment, while at the same time saving you a significant sum
of money!
5.1. CompuServe, GENIE, BIX, & Bulletin Board Files
We always upload the latest release of shareware files to GENIE,
CompuServe, BIX, and selected BBS(s) around the country. These
files can be found in the Vendor Support Software Library on the
IBM Round Table (M 616) of GENIE, in the "C" Language Section on
the IBM Programming Sig (GO IBMPRO) of CompuServe, and in the
"C.LANGUAGE" section of the "ibm.listings" on BIX. In all cases
we try to name the required files as BOSS01.LZH (code++),
BOSS2A.LZH & BOSS2B.LZH (libs), BOSS03.LZH (documentation).
Naturally, this naming convention is subject to the approval of
the respective service provider. However, it is reasonable to
assume that the required files will always conform to a naming
convention that begins with "BOSS" or "BOS" and have the keyword
"windows" associated with them.
If you can not find The Window BOSS files on GENIE, BIX, or
CompuServe it may be due to a restructuring of the SIGs by the
respective service provider. Try looking in the vendor support,
systems, or language areas of the SIGS.
Bulletin Board files follow the same naming conventions as GENIE
and CompuServe files.
5.2. The SHAREWARE Distribution Diskette(s)
The SHAREWARE diskette(s) contain the following files:
Shareware Disk 1
LHARC.EXE <- Archive utility
LHAR.DOC <- Archive utility documentation
BOSS_DOC.LZH <- Window BOSS Documentation archive
BOSS_SUP.LZH <- Support archive (code, etc.)
READ.ME <- Important notes
Page: 26
The Window BOSS
The Shareware Distribution Diskette - continued.
Shareware Disk 2
BOSS_LB1.LZH <- Library archive (Microsoft)
BOSS_LB2.LZH <- Library archive (Watcom, Zortech)
BOSS_LB3.LZH <- Library archive (Mix, Aztec, C86)
Shareware Disk 3
BOSS_LB4.LZH <- Library archive (Datalight, Lattice,
Borland Turbo C)
BOSS_LB5.LZH <- Library archive (Microsoft Quick C,
TopSpeed C)
=============================================================
Contents of BOSS_DOC
BOSS.MAN <- This manual
BOSS.TOC <- Table of Contents
Contents of BOSS_SUP
AZCS.BAT <- Compiler Driver - Aztec
C86.BAT <- Compiler Driver - CI86
TSS.BAT <- Compiler Driver - TopSpeed C
DLCS.BAT <- Compiler Driver - Datalight
LCS3.BAT <- Compiler Driver - Lattice 3.4
LCS6.BAT <- Compiler Driver - Lattice 6.0
MSC5.BAT <- Compiler Driver - Microsoft C 5.X
MSC6.BAT <- Compiler Driver - Microsoft C 6.X
MSQC20.BAT <- Compiler Driver - Quick C 2.0
MSQC25.BAT <- Compiler Driver - Quick C 2.5
PCCM.BAT <- Compiler Driver - Mix Power C
TCS.BAT ** <- Compiler Driver - Turbo C
WECS.BAT <- Compiler Driver - EXPRESS C
WOCS.BAT <- Compiler Driver - Watcom C
ZTCS.BAT <- Compiler Driver - Zortech C
** For use with both Turbo C 2.0 and the Standard C
Compiler distributed with Turbo C++ 1.0
Continued on next page....
Page: 27
The Window BOSS
The Shareware Distribution Diskette - continued.
Contents of BOSS_SUP.LZH - continued.
LOADTS.BAT <- Link Batch file - TopSpeed C
LOADAZ.BAT <- Link Batch file - Aztec
LOADC86.BAT <- Link Batch file - CI86
LOADDLC.BAT <- Link Batch file - Datalight
LOADLC3.BAT <- Link Batch file - Lattice 3.4
LOADLC6.BAT <- Link Batch file - Lattice 6.0
LOADMS5.BAT <- Link Batch file - Microsoft C 5.X
LOADMS6.BAT <- Link Batch file - Microsoft C 6.X
LOADQC20.BAT <- Link Batch file - Quick C 2.0
LOADQC25.BAT <- Link Batch file - Quick C 2.5
LOADPC.BAT <- Link Batch file - Mix Power C
LOADTC.BAT ** <- Link Batch file - Turbo C
LOADWAT.BAT <- Link Batch file - Watcom C
TSAPP.PRJ <- MAKE file - TopSpeed C
TSSWIN.PRJ <- MAKE file - TopSpeed C
** For use with both Turbo C 2.0 and the Standard C
Compiler distributed with Turbo C++ 1.0
Page: 28
The Window BOSS
The Shareware Distribution Diskette - continued.
Contents of BOSS_SUP - continued.
LOADWEC.BAT <- Link Batch file - EXPRESS C
LOADZTC.BAT <- Link Batch file - Zortech C
BOSSDEMO.C <- Source to BOSSDEMO
BOSSDEMO.EXE <- DEMO Program
GENINDEX.C <- Source to GENINDEX
HELLO.C <- The Classic...
INTELC.HLP <- Demo DATA file
INTELC.NDX <- Index for Demo DATA file
REV.HST <- Revision History
REV.LEV <- Revision Level
SAMPLE.C <- Data entry sample program
WINDOWS.FN5 <- Type Checking INCLUDE file
WINDOWS.FN6 <- Type Checking INCLUDE file
WINDOWS.FNZ <- Type Checking INCLUDE file
WINDOWS.FNT <- Type Checking INCLUDE file
WINDOWS.EXT <- External Definition INCLUDE file
WINDOWS.H <- BOSS INCLUDE file
WN_FRMGE.C <- Data Entry form reader
WN_GDATE.C <- Data Entry function (dates)
WN_GFLOA.C <- Data Entry function (floats)
WN_GPHON.C <- Data Entry function (phone)
WN_GTIME.C <- Data Entry function (time)
WN_GULON.C <- Data Entry function (unsigned long)
WN_GBOOL.C <- Data Entry function (logical)
WN_GDOUB.C <- Data Entry function (double)
WN_GINT.C <- Data Entry function (integer)
WN_GLONG.C <- Data Entry function (long)
WN_GPWOR.C <- Data Entry function (password)
WN_GTEXT.C <- Data Entry function (various text)
WN_GUINT.C <- Data Entry function (unsigned int)
WN_IEMSG.C <- Data Entry error message handler
WN_IHMSG.C <- Data Entry help message hander
WN_HELP.C <- Help function source
WN_POPUP.C <- Popup function source
WN_PUTS.C <- Source to wn_puts()
Contents of BOSS_LB1
SMSC5.LIB <- BOSS library - Microsoft C 5.X
SMSC6.LIB <- BOSS library - Microsoft C 6.X
Contents of BOSS_LB2
WATEC.LIB <- BOSS library - EXPRESS C
WATOC.LIB <- BOSS library - Watcom C
ZTECH.LIB <- BOSS library - Zortech C
Page: 29
The Window BOSS
The Shareware Distribution Diskette - continued.
Contents of BOSS_LB3
MWIN.MIX <- BOSS library - Mix Power C
SAZTEC.LIB <- BOSS library - Aztec C
SC86.LIB <- BOSS library - CI86
Contents of BOSS_LB4
SDLC.LIB <- BOSS library - Datalight
SLAT3.LIB <- BOSS library - Lattice C 3.4
SLAT6.LIB <- BOSS library - Lattice C 6.0
STC.LIB <- BOSS library - Turbo C
Contents of BOSS_LB5
SMSQC20.LIB <- BOSS library - QuickC 2.0
SMSQC25.LIB <- BOSS library - QuickC 2.5
TSC.LIB <- BOSS library - TopSpeed C
Page: 30
The Window BOSS
5.3. The SOURCE Distribution Diskette(s)
The SOURCE diskette(s) contain the following files:
DEMO / DOC Disk
LHARC.DOC <- Documentation for ARC.EXE
LHARC.EXE <- Archive utility
DOC.LZH <- Manual
DEMO.LZH <- DEMO program & data files
READ.ME <- Important notes
REVHST.LZH <- Revision History
REV.LEV <- Revision Level
DISKS.LST <- List of files on source disks
Disk 1
CFILES.LZH <- Source to all "C" modules
WATCOM.LZH <- Watcom Specific files
DLC.LZH <- Datalight Specific files
ASMFILES.LZH <- Source to all "Assembly" modules
TSC.LZH <- TopSpeed C Specific files
Disk 2
MS5.LZH <- Microsoft C 5.X Specific files
MSQC20.LZH <- Microsoft Quick C 2.0 Specific files
MSQC25.LZH <- Microsoft Quick C 2.5 Specific files
TCPP.LZH <- Turbo C++ Specfic files
MIX.LZH <- Mix Power C Specific files
ZTC.LZH <- Zortech C Specific files
C86.LZH <- CI86 Specific files
LC3.LZH <- Lattice 3.4 Specific files
Disk 3
TC2.LZH <- Turbo C Specific files
LC6.LZH <- Lattice 6.0 Specific files
AZTEC.LZH <- Aztec Specific files
MS6.LZH <- Microsoft C 6.X Specific files
Page: 31
The Window BOSS
The SOURCE Distribution Diskette(s) - continued
Contents of ASMFILES.LZH (ASM Source Files)
AZVLIB.ASM <- ASM routines for Aztec
DLVLIB.ASM <- ASM routines for Datalight
MSVLIB.ASM <- ASM routines for MSC, Borland, Watcom
VLIB.ASM <- ASM routines for Lattice & CI86
PCVLIB.ASM <- ASM routines for Mix Power C
Microsoft MASM format
WCVLIB.ASM <- ASM routines for WATCOM C
TCVLIB.ASM <- ASM routines for Turbo C++
Contents of AZTEC.LZH (Aztec Specific Files)
CCC.BAT <- Compact model compiler driver
CCL.BAT <- Large model compiler driver
CCM.BAT <- Medium model compiler driver
CCS.BAT <- Small model compiler driver
CCOMPILE.BAT <- Compact model - compile *.c
LCOMPILE.BAT <- Large model - compile *.c
MCOMPILE.BAT <- Medium model - compile *.c
SCOMPILE.BAT <- Small model - compile *.c
LOADAZ.BAT <- Link driver for BOSSDEMO
MAKELIB.BAT <- Build LIB from O(s)
MAKELIB.CMD <- Data file for MAKELIB.BAT
SWIN.LIB <- Small model library
LWIN.LIB <- Large model library
WINDOWS.FNS <- Type checking header file
?AZVLIB.O <- Memory model specific object files
Contents of C86.LZH (Computer Innovations Specific Files)
CC.BAT <- Small model compiler driver
CCBIG.BAT <- Large model compiler driver
EPILOGUE.H <- ASM include file
LCOMPILE.BAT <- Large model - compile *.c
LOADC86.BAT <- Link driver for BOSSDEMO
MAKELIB.BAT <- Builds LIB file from OBJ(s)
MODEL.H <- ASM include file
PROLOGUE.H <- ASM include file
SCOMPILE.BAT <- Small model - compile *.c
?VLIB.OBJ <- Memory model specific object files
Libraries must be created locally for the CI86 compiler.
Page: 32
The Window BOSS
The SOURCE Distribution Diskette - continued.
Contents of CFILES.LZH (C Source Files)
BOSSDEMO.C <- BOSSDEMO Source
DOSINT.C <- AZTEC compatibility module.
GENINDEX.C <- GENINDEX Source
HELLO.C <- The classic...
SCANCODE.C <- Quickie to display KB scancodes
SAMPLE.C <- Data entry sample program
WINDOWS.C <- Globals
WINDOWS.H <- Window BOSS INCLUDE file
WINDOWS.EXT <- Window BOSS INCLUDE file
WN_ACTIV.C <- Window activation, memory mgmt ++
WN_BIOS.C <- BIOS video functions
WN_BOXSE.C <- Set box drawing character set
WN_CLOSE.C <- Window Close
WN_CLR.C <- Clear window
WN_COLOR.C <- Set window colors
WN_DBORD.C <- Draw window borders
WN_DELRO.C <- Delete row in window
WN_DMA.C <- Set video access mode
WN_SCROL.C <- Set window scrolling method
WN_HELP.C <- Help function source
WN_POPUP.C <- Popup menu source
WN_INIT.C <- Initialize window system
WN_DMODE.C <- Set window display mode
WN_FIXCS.C <- Fix physical cursor location
WN_GETS.C <- Get string with validation
WN_INSRO.C <- Insert row in window
WN_LOCAT.C <- Locate cursor in window
WN_MOVE.C <- Move window
WN_MOUSE.C <- Mouse interface routines
WN_NATRI.C <- Set new attributes NOW
WN_OPEN.C <- Window open
WN_PRINT.C <- Window printf
WN_PUTS.C <- Put string in window
WN_RESTO.C <- Restore window image
WN_SAVE.C <- Save window image
WN_STRING.C <- String (char) functions
WN_SUP.C <- Internal support functions
WN_SYNC.C <- Set/Clear cursor sync
WN_TITLE.C <- Title window (BASIC)
WM_STITLE.C <- Title window (SUPER)
WN_WRAP.C <- Set/Clear text wrap
WPRINTF.C <- Alternate window printf
WINDOWS.FN5 <- Prototype header
WINDOWS.FN6 <- Prototype header
WINDOWS.FNZ <- Prototype header
WINDOWS.FNT <- Prototype header
Page: 33
The Window BOSS
The SOURCE Distribution Diskette - continued.
Contents of CFILES.LZH (C Source Files - continued.)
WN_GDATE.C <- Data entry - get date
WN_GDOUBLE.C <- Data entry - get double
WN_GTIME.C <- Data entry - get time
WN_GTEXT.C <- Data entry - get text
WN_GPHONE.C <- Data entry - get phone #
WN_GPWORD.C <- Data entry - get password
WN_GINT.C <- Data entry - get integer
WN_GUINT.C <- Data entry - get unsigned integer
WN_GULONG.C <- Data entry - get unsigned long
WN_GLONG.C <- Data entry - get long
WN_GFLOAT.C <- Data entry - get float
WN_GBOOL.C <- Data entry - get logical
WN_DTEXT.C <- Data entry - display text
WN_FRMOPN.C <- Data entry - FORM open
WN_FRMGET.C <- Data entry - FORM read
WN_FRMCLS.C <- Data entry - FORM close
WN_INPUT.C <- Data entry - common input
WN_IEMSG.C <- Data entry - error msg handler
WN_IHMSG.C <- Data entry - help msg handler
Page: 34
The Window BOSS
The SOURCE Distribution Diskette - continued.
Contents of MIX.LZH (Mix Power C Specific Files)
ASSEMBLE.BAT <- Assembler driver
LOADL.BAT <- Sample link driver - large model
LOADM.BAT <- Sample link driver - medium model
LOADS.BAT <- Sample link driver - small model
MAKELIB.BAT <- Library driver (all models)
PCCL.BAT <- Large model compiler driver
PCCM.BAT <- Medium model compiler driver
PCCS.BAT <- Small model compiler driver
SCOMPILE.BAT <- Small model - compile *.c
MCOMPILE.BAT <- Medium model - compile *.c
LCOMPILE.BAT <- Large model - compile *.c
MAKELIB.CMD <- Data file for MAKELIB.BAT
WINDOWS.FNS <- Type checking head
?PCVLIB.MIX <- Memory model specific object file
LWIN.MIX <- Large model library
SWIN.MIX <- Small model library
BOSSDEMO.PRJ <- Project file for BOSSDEMO program
Contents of LC3.LZH & LC6.LZH (Lattice C Specific Files)
LCOMPILE.BAT <- Large model - compile *.c
SCOMPILE.BAT <- Small model - compile *.c
PCOMPILE.BAT <- P model - compile *.c
DCOMPILE.BAT <- D model - compile *.c
HCOMPILE.BAT <- Huge model - compile.c
LCS.BAT <- Small model compiler driver
LCL.BAT <- Large model compiler driver
LCP.BAT <- P model compiler driver
LCD.BAT <- D model compiler driver
LOADLC.BAT <- Link driver for BOSSDEMO
LWIN.LIB * <- Large model library
SWIN.LIB * <- Small model library
MAKELIB.BAT <- Build LIB file from OBJ(s)
MAKELIB.CMD <- Data file for MAKELIB.BAT
WINDOWS.FNS <- Type checking header
?VLIB.OBJ <- Memory model specific object file
* Not present in the LC3.LZH archive. The libraries for
the Lattice 3.41 compiler will have to be created locally.
See "Library Rebuilding" for instructions on how to
accomplish this.
Page: 35
The Window BOSS
The SOURCE Distribution Diskette - continued.
Contents of DLC.LZH (Datalight Specific)
CCS.BAT <- Small model compiler driver
CCL.BAT <- Large model compiler driver
CCD.BAT <- D model compiler driver
CCP.BAT <- P model compiler driver
LCOMPILE.BAT <- Large model - compile *.c
SCOMPILE.BAT <- Small model - compile *.c
DCOMPILE.BAT <- D model - compile *.c
PCOMPILE.BAT <- P model - compile *.c
LOADDLC.BAT <- Link driver for BOSSDEMO
MAKELIB.BAT <- Build LIB from OBJ(s)
MAKELIB.CMD <- Data file for MAKELIB.BAT
WINDOWS.FNS <- Type checking header
?DLVLIB.OBJ <- Memory model specific object file
The libraries for the Datalight compiler will have to be
created locally. See "Library Rebuilding" for
instructions on how to accomplish this.
Contents of TC2.LZH and TCPP.LZH (Borland Compilers)
BOSSDEMO.PRJ <- TC Project file for BOSSDEMO
SAMPLE.PRJ <- TC Project file for SAMPLE
HELLO.PRJ <- TC Project file for HELLO
LCOMPILE.BAT <- TCC - Large model - compile *.c
SCOMPILE.BAT <- TCC - Small model - compile *.c
CCOMPILE.BAT <- TCC - Compact model - compile *.c
MCOMPILE.BAT <- TCC - Medium model - compile *.c
HCOMPILE.BAT <- TCC - Huge model - compile *.c
LOADTC.BAT <- Tlink driver for BOSSDEMO
LWIN.LIB <- Large model library
MAKELIB.BAT <- Build LIB from OBJ(s)
MAKELIB.CMD <- Data file for MAKELIB.BAT
SWIN.LIB <- Small model library
TCCL.BAT <- Large model TCC compiler driver
TCCS.BAT <- Small model TCC compiler driver
TCCM.BAT <- Medium model TCC compiler driver
TCCC.BAT <- Compact model TCC compiler driver
TCCH.BAT <- Huge model TCC compiler driver
WINDOWS.FNS <- Type checking header
?MSVLIB.OBJ <- Memory model specific object file
?TCVLIB.OBJ <- Memory model specific object file
Page: 36
The Window BOSS
The SOURCE Distribution Diskette - continued.
Contents of MS5.LZH & MS6.LZH (Microsoft C Specific Files)
LCOMPILE.BAT <- Large model - compile *.c
SCOMPILE.BAT <- Small model - compile *.c
MCOMPILE.BAT <- Medium model - compile *.c
CCOMPILE.BAT <- Compact model - compile *.c
HCOMPILE.BAT <- Huge model - compile *.c
MCCL.BAT <- Large model compiler driver
MCCS.BAT <- Small model compiler driver
MCCM.BAT <- Medium model compiler driver
MCCC.BAT <- Compact model compiler driver
MCCH.BAT <- Huge mode compiler driver
LOADMS.BAT <- Link driver for BOSSDEMO
LWIN.LIB ** <- Large model library
SWIN.LIB ** <- Small model library
MAKELIB.BAT <- Build LIB from OBJ(s)
MAKELIB.CMD <- Data file for MAKELIB.BAT
*.MAK (6.0 Only) <- MAKE files - BOSSDEMO, HELLO, SAMPLE
WINDOWS.FNS <- Type checking header
?MSVLIB.OBJ <- Memory model specific object file
** Not present in the MS5.LZH archive. The libraries for
the Microsoft 5.X compiler will have to be created
locally. See "Library Rebuilding" for instructions on how
to accomplish this.
Page: 37
The Window BOSS
The SOURCE Distribution Diskette - continued.
Contents of MSQC20.LZH & MSQC25.LZH
(Microsoft Quick C Specific Files)
SCOMPILE.BAT <- Small model - compile *.c
LCOMPILE.BAT <- Large model - compile *.c
MCOMPILE.BAT <- Medium model - compile *.c
CCOMPILE.BAT <- Compact model - compile *.c
HCOMPILE.BAT <- Huge model - compile *.c
MCCL.BAT <- Large model compiler driver
MCCS.BAT <- Small model compiler driver
MCCM.BAT <- Medium model compiler driver
MCCC.BAT <- Compact model compiler driver
MCCH.BAT <- Huge model compiler driver
LOADMS.BAT <- Link driver for BOSSDEMO
LWIN.LIB ** <- Large model library
SWIN.LIB ** <- Small model library
MAKELIB.BAT <- Build LIB from OBJ(s)
MAKELIB.CMD <- Data file for MAKELIB.BAT
*.MAK <- MAKE files - BOSSDEMO, HELLO, SAMPLE
WINDOWS.FNS <- Type checking header
?MSVLIB.OBJ <- Memory model specific object file
** Not present in the MSQC20.LZH archive. The libraries
for the Microsoft QuickC 2.0 compiler will have to be
created locally. See "Library Rebuilding" for
instructions on how to accomplish this.
Page: 38
The Window BOSS
The SOURCE Distribution Diskette - continued.
Contents of ZTC.LZH (Zortech C Specific Files)
CCOMPILE.BAT <- Compact model - compile *.c
LCOMPILE.BAT <- Large model - compile *.c
HCOMPILE.BAT <- Huge model - compile *.c
MCOMPILE.BAT <- Medium model - compile *.c
SCOMPILE.BAT <- Small model - compile *.c
LOADZTC.BAT <- Link driver for BOSSDEMO
LWIN.LIB <- Larger model library
MAKELIB.BAT <- Build LIB file from OBJ(s)
MAKELIB.CMD <- Data file for makelib.bat
SWIN.LIB <- Small model library
WINDOWS.FNS <- Type checking header file
ZTCC.BAT <- Compact model compiler driver
ZTCCB.BAT <- Compact model big compiler driver
ZTCL.BAT <- Large model compiler driver
ZTCLB.BAT <- Large model big compiler driver
ZTCM.BAT <- Medium model compiler driver
ZTCMB.BAT <- Medium model big compiler driver
ZTCS.BAT <- Small model compiler driver
ZTCSB.BAT <- Small model big compiler driver
ZTCH.BAT <- Huge model compiler driver
ZTCHB.BAT <- Huge model big compiler driver
?MSVLIB.OBJ <- Memory model specific object files
Contents of WATCOM.LZH (Watcom Specific Files)
WCCS.BAT <- Small model compiler driver
WCCL.BAT <- Large model compiler driver
WCCM.BAT <- Medium model compiler driver
WCCC.BAT <- Compact model compiler driver
WCCH.BAT <- Huge model compiler driver
XCC.BAT <- EXPRESS C compiler driver
CCOMPILE.BAT <- Compact model - compile *.c
LCOMPILE.BAT <- Large model - compile *.c
MCOMPILE.BAT <- Medium model - compile *.c
SCOMPILE.BAT <- Small model - compile *.c
HCOMPILE.BAT <- Huge model - compile *.c
LOADWAT.BAT <- Link driver for BOSSDEMO
LOADWEC.BAT <- Link driver for BOSSDEMO (EXPRESS C)
MAKELIB.BAT <- Build LIB from OBJ(s)
MAKELIB.CMD <- Data file for MAKELIB.BAT
SWIN.LIB <- Small model library
LWIN.LIB <- Large model library
XMWIN.LIB <- EXPRESS C library
WINDOWS.FNS <- Type checking header
?WCVLIB.OBJ <- Memory model specific object files
Page: 39
The Window BOSS
The SOURCE Distribution Diskette - continued.
Contents of TSC.LZH (TopSpeed C Specific Files)
BOSSDEMO.PRJ <- MAKE file for BOSSDEMO
CMSVLIB.OBJ <- Medium model specific object file
CWIN.PRJ <- Compact model - make file component
GENFNS.BAT <- Batch file to create "windows.fns"
HELLO.PRJ <- MAKE file for HELLO
LMSVLIB.OBJ <- Large model specific object file
LWIN.LIB <- Large model library
LWIN.PRJ <- Large model - make file component
MAKECWIN.PRJ <- MAKE file for Compact model library
MAKELIB.BAT <- Library generation control file
MAKELWIN.PRJ <- MAKE file for Large model library
MAKEMTWI.PRJ <- MAKE file for Mthread model library
MAKEMWIN.PRJ <- MAKE file for Medium model library
MAKESWIN.PRJ <- MAKE file for Small model library
MAKEXWIN.PRJ <- MAKE file for Xlarge model library
MMSVLIB.OBJ <- Medium model specific object file
MTMSVLIB.OBJ <- Mthread model specific object file
MTWIN.PRJ <- MAKE file for Mthread model library
MWIN.PRJ <- Medium model - make file component
SAMPLE.PRJ <- MAKE file for SAMPLE
SMSVLIB.OBJ <- Small model specific object file
SWIN.LIB <- Small model library
SWIN.PRJ <- Small model - make file component
TSAPP.PRJ <- Generic Make file
WINDOWS.FNS <- Type checking header
XMSVLIB.OBJ <- Xlarge model specific object file
XWIN.PRJ <- Xlarge model - make file component
TSS.BAT <- Compiler driver batch file
Page: 40
The Window BOSS
6. Installation, Compiling, Linking
6.1. Installation
By the numbers:
1) MAKE A BACKUP OF ALL DISKS !!!
2) Shareware diskettes - Use LHARC to unarchive the
various LZH files. You will need 2100+k of free disk
space for all of the files! Alternatively, you can
extract only those files you need for use with a
specific compiler. Simply use LHARC to extract all the
files from BOSS_SUP.LZH then the library(s) you need
from BOSS_LB?.LZH, for example:
B>A:LHARC E A:BOSS_SUP
B>A:LHARC E A:BOSS_LB1 SMSC5.LIB
2) Source Code diskettes - Use LHARC to unarchive
CFILES.LZH and ASMFILES.LZH. Then, depending upon the
compiler you intend to use, unarchive only ONE of the
following: LC3.LZH, LC6.LZH, MS5.LZH, MS6.LZH,
MSQC20.LZH, MSQC25.LZH, DLC.LZH, C86.LZH, TC2.LZH,
TCPP.LZH, MIX.LZH, WATCOM.LZH, ZTC.LZH, TSC.LZH, or
AZTEC.LZH. If you plan on unarchiving all of the
compiler specific LZH files you will need
approximately 2 to 3 megabytes of free disk space!
3) Copy the LIBrary that corresponds to the compiler you
are using onto the disk(s) and/or sub-directories that
contain your "C" compiler's run time libraries . Be
sure that the small model library is named "SWIN.LIB"
(see notes below). The large model library should be
named "LWIN.LIB". The Mix Power C library is MWIN.MIX.
The EXPRESS C library is XMWIN.LIB.
** Shareware Users Note ** - The examples used in the
documentation assume the library's name to be SWIN.LIB
(small memory model). You should rename the
library you extracted to conform to this naming
convention to eliminate any possible confusion. For
example:
B:>RENAME SMSC5.LIB SWIN.LIB
** Shareware Users Note ** - Large model libraries are
not provided as part of the shareware disk set.
Page: 41
The Window BOSS
Installation - continued.
4) Copy (or rename) the small memory model compiler
driver batch file that corresponds to the compiler you
are using to:
CSM.BAT
5) If WINDOWS.FNS is not contained in the archive for
your compiler, or is not present after you unarchive
the required files, copy (or rename) WINDOWS.FN5,
WINDOWS.FN6, WINDOWS.FNZ, WINDOWS.FNT to
WINDOWS.FNS according to the following table:
Compiler File
--------- -----
LC3 & LC6 WINDOWS.FN5
Power C WINDOWS.FN5
WATCOM, EXPRESS C WINDOWS.FN5
MSC5, Quick C 2.0 WINDOWS.FN5
MSC6, Quick C 2.5 WINDOWS.FN6
Turbo C WINDOWS.FN5
TopSpeed C WINDOWS.FNT
CI86 -- None --
Aztec WINDOWS.FNZ
Datalight WINDOWS.FNZ
Zortech WINDOWS.FNZ
6) Read the "Compiling", "Linking", and "General Notes"
sections of this manual. The "General Notes" section
has across the board information that everyone should
review and compiler specific tips that are very
important.
7) Suggestion - After installing The Window BOSS, build
the HELLO program using either the command line
compiler or your integrated environment. If you have
any difficulty, review both the "Hints on Resolving
Common Problems" and "General Notes" section of this
manual. Pay special attention to the notes on your
specific compiler.
8) Remember there is no magic to using The Window BOSS.
It's simple!!
Page: 42
The Window BOSS
Installation/Compiling/Linking - continued.
6.2. Compiling (Command line)
Compile your application source code in the following
manner:
C>csm hello
Notes:
** ALL compilers should be invoked with the compiler
driver batch files supplied with The Window BOSS. Some
compilers require ".c" to be added to the name of the
source file e.g. "csm hello.c". The examples in this
manual assume you are creating small memory model
programs.
The Window BOSS includes "windows.h", "windows.fns", and
"windows.ext". These files can be placed with your
compiler's other INCLUDE files or they can remain in the
same directory as your "C" programs. Depending upon your
installation, you may have to edit HELLO.C and/or
WINDOWS.H to follow the "" .vs. <> include file
convention. All of BOSS's includes are of the form:
#include "include_file_name"
If you examine CSM.BAT you will notice some command line
parameters that are passed to your compiler. These
command line parameters are an absolute requirement and
must always be present. They are used by "windows.h" to
set various conditions required by your specific compiler.
Page: 43
The Window BOSS
Installation/Compiling/Linking - continued.
6.3. Linking (Command line)
Simply specify the ?WIN.LIB file that corresponds to the
compiler/memory model you are using. Don't forget to
include your compiler's runtime library as well. The
following examples demonstrate basic linking using the small
model library (medium for MIX Power C):
Lattice
link c+hello,hello,,swin+lcm+lc+lapi+lcr <- 3.41
lmb hello,hello,,swin+lcr; <- 6.XX
Computer Innovations
link hello,hello,,swin+c86s2s
Datalight
link c+hello,hello,hello,swin+nl
Microsoft C
link hello,hello,,swin <- 5.X
link hello,hello,,swin; <- 6.X
Microsoft QuickC
link hello,hello,,swin <- 2.0
qlink hello,hello,,swin <- 2.5
Borland
tlink /c c0s hello,hello,hello,swin emu maths cs
Mix Power C <- Medium
pcl hello;mwin [5k,40k,0]
Aztec
ln hello swin.lib m.lib c.lib
Watcom
wlink file hello library swin,maths,clibs
EXPRESS C
wlink file hello library xmwin,wcexpl
ZORTECH
blink hello,hello,,swin
TOPSPEED
ts hello /m
** Read the "TopSpeed" section of "General Notes"
Page: 44
The Window BOSS
Installation/Compiling/Linking - continued.
Linking Notes:
The linking examples may have to be modified to include the
complete path specifiers for each library. For example:
link hello,hello,,c:\msc5\lib\swin
Fixup offset errors are always the result attempting of to link
code compiled under one memory model with libraries created for
use with another memory model.
Unresolved externals can be caused by missing user functions,
missing library functions, linking command errors, missing
project files, missing MAKE files, or attempting to link a non
conforming library. Misplaced commas on the command line and C
code typing errors are the most common problems. In the case of
integrated environment fans (Quick C, MSC 6.0 PWB, Turbo C) it is
almost always due to forgetting to SET THE PROGRAM LIST to
include The Window BOSS library or, in the case of Turbo C,
forgetting to create a project file that includes an entry for
The Window BOSS library.
Page: 45
The Window BOSS
7. General and Compiler Specific Notes
Source code is provided for all of the high level data entry
functions, the help system, and the popup menu functions. This
is done so that you (1) have a wide variety of templates to base
any local data entry functions on and (2) have the source to the
code to those functions (help & popup) which are commonly changed
to suit individual taste.
WN_BIOS.C and the various assembler files (*.ASM) contain all of
the BIOS interface functions. Only v_kstat(), v_border(),
_vidblt(), and xferdata() are written in assembly language!!
This one is REAL important - Both the C and assembly functions
make very heavy use of pointers. The code contains numerous
checks to ensure that memory, outside of that in use by the
program, is not corrupted. If you attempt to do something that
would cause memory to be corrupted an error message will appear
and your program will exit. This message will usually say that a
bad handle was passed to some function. This error is normally
caused by a stray pointer in the application code! Check all
your pointer operations. Doing strcpy's to arrays with
insufficient space will always cause this type of problem.
Generally speaking, the members of the window control block
(refer to windows.h) should not be modified unless you are
familiar with how they are used by the various functions. We
suggest you obtain a hard copy of "windows.h" and review it even
if you don't have any intentions of modifying the code. There is
a great deal of information contained in "windows.h" that you may
find helpful when writing your application.
Although the routines appear to support the multi page
capabilities of the IBM Color Card, actual support of this
feature has not been implemented. Invoking the functions with
references to video pages other than than those documented might
produce interesting, but undesired results.
Programs such as Wordstar and Lotus change the video mode when
they run. If your system is equipped with a color monitor and
your windows are appearing in black and white, issue a call to
v_smode to set the video mode to 3. Alternatively, you can use
the "MODE CO80" command at DOS level before you run your
application.
The best way to manipulate the method by which windows are
updated is via the wn_dmode() function. Calling wn_dmode(PAINT)
causes the image to be painted while wn_dmode(FLASH) causes the
image to be flash updated. Flash updating is the preferred
(default) method. Please keep in mind that windows are always
flash updated on monochrome systems.
Page: 46
The Window BOSS
7.1. Upgrading - Existing Applications Impact
If you are upgrading from a previous version of The Window BOSS
be sure to re-compile and re-link your application. This will
eliminate the possibility of any "unusual" problems.
7.2. Current Compilers & Libraries
The distribution libraries were created on an IBMPC/AT under DOS
3.3 using Lattice 3.41, Lattice 6.02, Microsoft 5.1, Microsoft
6.0, Microsoft QuickC 2.0, Microsoft QuickC 2.5, Borland Turbo C
2.0, Borland Turbo C++ 1.0, Datalight 3.10, Aztec 4.2b-1, Watcom
C 8.0, Mix Power C 2.0, Zortech 2.10, TopSpeed 1.06, and Computer
Innovations CI86 2.30A. Marion was used to create the LIB files
for CI86. Microsoft's LIB was used for the Microsoft variants,
Datalight and Zortech. Lattice, Aztec, Watcom and the Mix Power
C libraries were created with the library managers shipped with
their respective compilers. Test hardware: IBMPC/XT/AT, PS/2,
with IBM Monochrome, CGA, EGA, and VGA video adapters.
Additionally, a wide variety of clones (8088, 8086, 80186, 80286,
80386) with brand name and noname components were also tested.
Several of the compilers support a compile time command line
parameter that results in structures being byte aligned instead
of word aligned. In all cases, the compiler default option was
used to compile the modules in the various libraries.
7.3. EGA & VGA Expanded Line & Column Modes
The Window BOSS supports the Expanded Line and Column modes of
both the EGA and VGA video adapters. However, in order to
preserve The Window BOSS's device independence you will have to
do a little extra work if you intend to write an application that
is going to take advantage of one of these expanded modes. The
rules are quite simple. Your application must remain in one
mode. It can be (25 x 80), (80 x 132), (80 x 43), (80 x 50), or
whatever size your adapter supports. The adapter must be in the
mode you chose prior to calling ANY of The Window BOSS functions.
WN_PSINIT() must be called first, called only once, and be called
with parameters that reflect the physical screen size that your
application is going to use. That's all there is to it!
7.4. Terminate and Stay Resident (TSR) Programming
The Window BOSS has been successfully incorporated in TSR
programs. Due to the complexities involved in writing and
resolving conflicts associated with TSR(s) and the lack of any
real standards for TSR(s) Star Guidance Consulting, Inc. can not
provide any form of support or assistance for TSR related
problems. We will, however, work with you in resolving any
problem you can replicate when the program is not resident.
Page: 47
The Window BOSS
General Notes - continued.
7.5. Important Globals
Several global symbols are used by the various functions. All are
defined in "windows.c" and referenced in "windows.ext". A few
are worthy of special mention:
int wn_dmaflg;
int wn_sbit;
int wns_escape;
7.5.1. wns_dmaflg
wn_dmaflg when TRUE enables direct writes into video ram.
This is the default setting and should work in all cases.
Setting wn_dmaflg to FALSE will disable these direct writes.
When wn_dmaflg is FALSE the BIOS video routines are used.
This results in slower screen updates. However, this method
does have the advantage of being considered "well behaved"
by IBM's Topview, Microsoft's Windows, and DESQ.
7.5.2. wn_sbit
wn_sbit controls the window refresh rate on systems with
color cards. When set to SLOW (defined in windows.h),
window displays will appear to be painted on the screen
rather than flash displayed. This is the default value.
Setting wn_sbit to FAST enables flash displays. Artistic use
of wn_sbit can give your application that extra visual
touch. Experiment!
From a performance standpoint, the fastest (flicker & snow
free) screen updates will occur with wn_dmaflg=TRUE
(default) and wn_sbit=FAST (default). The key words here
are flicker and snow free. Scrolling speed can be
increased, with a proportional increase in flicker
(perhaps), by using wn_scroll() function to set the
scrolling method for the window to BIOS. This technique
will provide the fastest screen updates and scrolling on
color systems.
7.5.3. wns_escape
wns_escape is set to TRUE whenever wn_input detects that the
escape key has been pressed. Since wn_input is the
underlying logic for the entire data entry package,
knowledge of this global may help you manage your data entry
activities better. For example, you may want to follow one
logic path if data entry completed normally and another if
data entry was terminated because the escape key was
pressed.
Page: 48
The Window BOSS
General Notes - continued.
7.6. Microsoft C
Some large model programs may require a stack greater than 4096
bytes.
PWB and Integrated Development Environment fans take note - If
program and/or data space is at a premium - disabling debugging
can sometimes restore significant program and/or data space.
Microsoft Version 5.XX libraries were generated using the "/Zl"
command line parameter. This should insure compatibility with
previous versions of the compiler.
Microsoft Version 6.XX Programmer Workbench fans must define
"MSCV6=1" in the defines dialogue box. Do this by selecting
"OPTIONS" then "C COMPILER OPTIONS".
The same rules that apply to the creation of MAKE files for Quick
C (SETTING THE PROGRAM LIST) also apply. The program list can be
set by selecting the MAKE dialog box, then SET PROGRAM LIST. Be
sure to include an explicit entry for The Window BOSS library.
7.7. Microsoft QuickC
Microsoft QuickC - All Integrated Development Environment users
MUST create MAKe files in order to be able to create EXEcutable
programs from within the Developmental Environment. The MAKe
file must contain the names of all of the programs that comprise
the application along with specific entries for all 3rd party
libraries being used. In the case of 3rd party libraries, the
complete path specification for the library must be provided
(e.g. c:\msc\lib\swin.lib). The MAKe file is created when you set
the program list. Select the MAKE dialog BOX, then SET PROGRAM
LIST. Follow the standard rules for the creation of "MAK" files.
QuickC 2.0 Integrated Development Environment
MSCV4=1 must be defined in "COMPILER FLAGS" "DEFINES" dialog box
(select OPTIONS, MAKE, COMPILER FLAGS, then fill in DEFINES with
MSCV4=1).
QuickC 2.5 Integrated Development Environment
MSCV6=1 must be defined in "COMPILER FLAGS" "DEFINES" dialog box
(select OPTIONS, MAKE, COMPILER FLAGS, then fill in DEFINES with
MSCV6=1).
Page: 49
The Window BOSS
General Notes - continued.
7.8. Borland Turbo C
Borland Turbo C pre version 1.5 users who prefer "The Integrated
Environment" over the "Command-Line Version" MUST define the
symbol "BORLAND=1". (Select Options, Compiler, Defines and enter
"BORLAND=1" in the dialogue box without quotes and in upper
case.)
Integrated Environment users MUST create PROJECT files in order
to be able to create EXEcutable programs from within the Integrated
Environment. The PROJECT file must contain the names of all of
the programs that comprise the application along with specific
entries for all 3rd party libraries being used. In the case of
3rd party libraries, the complete path specification for the
library must be provided (e.g. c:\turboc\lib\swin.lib).
7.9. Borland Turbo C++
IDE (Integrated Development Environment) - Window BOSS users who
prefer the IDE over the command line compiler *MAY* have to
disable source level debugging when attempting to run their
applications from within the IDE via ^F9. There are also
problems with running Window BOSS applications from within the
IDE when Sidekick (1.56A) is loaded. Borland has been notified
of these problems (7/19/90). PLEASE KEEP IN MIND THAT THESE
PROBLEMS ONLY APPLY WHEN USING THE IDE - THEY DO NOT IMPACT THE
FINAL APPLICATION.
To disable source level debugging from within the IDE, select
Options, then Debugger, then set "Source Debugging" to NONE.
It may also help to disable debugging information from being
placed in the OBJ files. This is done by selecting Options,
then Compiler, then Code Generation, then More - then disable
"Debug info in OBJs".
7.10. MIX Power C
Mix Power C - (1) Merge files must be created and edited with
text editors that do not insert ^Z for end of file. (2) PCO.EXE
should be in the default directory (the same directory that your
C files are in). (3) The linker should always be told the amount
of memory to be assigned to the stack, heap, and far heap. Since
The Window BOSS uses both heap and far memory outside of your
program, it is imperative that PCL be invoked with reasonable
parameters. Typical values are [5k,40k,0] or [5k,40k,100k]. Refer
to the chapter on the Mix Linker in the Power C manual.
Page: 50
The Window BOSS
General Notes - continued.
7.11. TopSpeed C
TopSpeed C - The TopSpeed compiler requires all applications to
be compiled and linked via PROJECT (MAKE) files. The Window BOSS
library must be included in all project files that reference
applications that use The Window BOSS. In addition to including
an entry for The Window BOSS in your project file, the project
file for The Window BOSS library must be located in the same
directory as the source code for the application you are
compiling. The Window BOSS libraries themselves should be placed
in the directory that TopSpeed C uses for its run time libraries.
The following example (small memory model) should help clarify
this.
Application Directory TopSpeed C LIB Directory
(C:\SOURCE) (C:\TS\LIB)
HELLO.C <-Application Code SWIN.LIB <- Library
HELLO.PRJ <-Application PRJ File
SWIN.PRJ <-BOSS Lib PRJ File
WINDOWS.H \
WINDOWS.FNS > Standard Window BOSS "#include" files
WINDOWS.EXT /
Application project files must include a memory model specific
"import" directive. For example, the HELLO.PRJ file for the
small memory model is as follows:
make DOS EXE
option +case +map +pack +check -vid
model Small
include %N initexe
import %O%M_clib
import swin
The Shareware and Source media kit contain a generic application
project file named "TSAPP.PRJ". "TSAPP.PRJ" can be copied to
"HELLO.PRJ", "BOSSDEMO.PRJ", and "SAMPLE.PRJ". This will allow
you to test and experiment with these programs using either the
command line compiler or the integrated environment. Application
project files can also be created and/or edited under TopSpeed's
integrated environment by using the "Project" pulldown menu.
Page: 51
The Window BOSS
General Notes - continued.
TopSpeed C - continued.
Project files for the various Window BOSS libraries ("SWIN.PRJ",
"MWIN.PRJ", "CWIN.PRJ", "LWIN.PRJ", "XWIN.PRJ", and "MTWIN.PRJ")
are provided as part of the Window BOSS Source media kit.
Depending on the memory model(s) you use, one, or more, of these
files must be present in the same directory as your application
code and application project file.
"SWIN.PRJ" is distributed under the name of TSSWIN.PRJ on the
Shareware media kit. It should be renamed to "SWIN.PRJ" and must
be present in the same directory as your application code and
application project file.
Page: 52
The Window BOSS
General Notes - continued.
7.12. Datalight C
BOSSDEMO.C and WN_FRMGE.C must be compiled with the BIG compiler.
7.13. Zortech C
Zortech C - ZORLIB (as distributed with version 2.0 of Zortech C)
can not produce a correctly formatted library of The Window BOSS
functions. Microsoft's library manager LIB was used to create
the libraries distributed with The Window BOSS. Please do not
attempt to recreate or update any of The Window BOSS libraries
with ZORLIB. Zortech has been notified of the problem.
BOSSDEMO.C must be compiled with the BIG compiler.
7.14. Watcom C
Express C- has a difficult time with the BOSSDEMO program unless
you edit BOSSDEMO.C and set MAXWIN to around 50. You will also
need to play with the OPTION STACK when linking (2k seems to
work).
7.15. Lattice C
Lattice C - Lattice large model programs sometimes require the
heap to be set to a minimum value. This can be accomplished by
setting _MNEED or specifying the stack and heap size at run time.
A minimum heap size of 32k will usually satisfy most
applications. REMEMBER: This is for the LARGE model only. Refer
to the Lattice reference manuals for further information on
setting the stack and heap size.
Page: 53
The Window BOSS
General Notes - continued.
7.16. Aztec C
Aztec C - Use the following command when recompiling BOSSDEMO.C:
csm -Z6000 bossdemo
The Aztec C linker (LN) sometimes requires The Window BOSS
library to be included as part of the command line twice to
eliminate unresolved externals. For example, to link the HELLO
program the command line would be:
ln hello swin.lib swin.lib m.lib c.lib
^ ^
BOSS Library
7.17. Feedback
PLEASE - Pass along your comments. The Window BOSS is your tool.
If you find any logic errors let us know. We are committed to
making The Window BOSS the best price performer available. Call,
write, or if you prefer, you can reach us via CompuServe, GENIE,
or BIX. Our CompuServe electronic mail ID is [71565,1001], our
GENIE mail address is "MONGELLUZZO", our BIX NAME is
"pmongelluzzo". Remember, there is no reason to sit, steam, or
complain to those who can not provide any real form of support.
Lastly, if you use The Window BOSS, register your copy. The
Shareware System will only work if you support it!
Page: 54
The Window BOSS
8. Hints on Resolving Common Problems
8.1. Unresolved Externals
Unresolved externals are most common with the programming
environments of Turbo C and Quick C. Both of these programming
environments require "program lists" or "make files". This type
of error can also be caused by not explicitly specifying a Window
BOSS library on the link command line. All linkers must have
explicit knowledge of what 3rd party libraries are to be linked
with the compiler libraries and your applications object files.
This problem is usually resolved by creating a program list or
make file that includes a explicit reference to one of The Window
BOSS libraries, or explicitly specifying the correct Window BOSS
library as part of the link command line. Refer to your compiler
documentation for further information.
8.2. Fixup Offset Errors
These are always the result of attempting to link code compiled
under one memory model with libraries created for use with
another memory model.
8.3. Bad Handle Exits
Both the C and assembly functions make very heavy use of
pointers. The code contains numerous checks to ensure that
memory does not get corrupted or randomly written over. This
error is normally caused by a stray pointer in the application
code! Check and recheck all of your pointer operations. Doing
strcpy's to arrays with insufficient space will always cause this
type of problem.
Oftentimes switching from the small memory model to large memory
model will initially produce these errors in programs that were
working fine in the small model. In nearly every case the
problem was traced to a stray pointer or improper pointer usage.
8.4. Fatal Compilation Errors
All command line compilers should be invoked with the compiler
driver batch files provided as part of The Window BOSS. This
insures the compiler specific compile time parameters are
specified correctly. If you elect to use you own method, be sure
to include ALL of the command line parameters that are specified
in the provided batch files.
8.5. Missing Files
Remember, the documentation covers two media kits (Shareware and
Source) and neither kit contains ALL files. If you are missing
files that are listed for your media kit, please contact us.
Page: 55
The Window BOSS
Hints on Resolving Common Problems - continued.
8.6. Linking Errors
(A) See "Unresolved Externals" above. (B) Most linking errors are
the result of; (1) forgetting to specify the library to link, (2)
specifying the wrong library, or (3) command line syntax errors.
Double check your compiler documentation for the proper way to
link "other libraries" or "3rd party libraries".
8.7. Other Problems
Double check this manual for proper usage, review your compiler
documentation, then contact us.
Page: 56
The Window BOSS
9. Making Changes
Incorporating local modifications or enhancements is, in part,
why you acquired the source code to begin with. Incorporating
your modifications or enhancements should be be a relatively
straight forward task provided you follow the basic guidelines
outlined in the subsequent sections of this manual.
If you feel you have developed a significant enhancement that is
both well documented and written please let us know. We have,
from time to time, incorporated customer supplied enhancements to
our products. Contact us for further details.
9.1. General Considerations
First, be sure that you are familiar with the existing
conventions and compiler specific feature test switches. Refer to
the various BATch files for specific examples of compiler
specific defines (etc.).
Please note that we assume that you have installed your compiler
exactly as suggested in the compiler's manual. This includes
suggested sub-directories, PATH specifiers, and environment
setup. Check and double check the "include" file requirements -
make sure you have the required files and that they have been
edited to correspond to the memory model you are writing code
for. Creating code that compiles under numerous compilers is not
an easy task. If you run into problems review your compilers
documentation and browse through the batch files provided. If
you still have problems - call!
Carefully review the area of code you wish to modify or enhance -
be sure to get a complete understanding of what's currently going
on before you add your own code. With the exception of the ASM
files, compiler and memory model specific feature test switches
are specified on the command line.
Depending upon the compiler being used, several warning errors
will be generated. Warnings created by the unmodified
distribution code can be safely ignored - all others should be
investigated.
A note of caution... PC/MS-DOS Version 2.XX's LINK can complain
if you build a new library that takes advantage of later LINK
enhancements. If this occurs, you can (1) upgrade to DOS 3.1++
or, (2) get a librarian that isn't so smart!! We suggest going
to the later revision of DOS.
Page: 57
The Window BOSS
Making Changes - continued.
9.2. Specific Changes to Consider
Both the Shareware and Source versions of The Window BOSS and
Data Clerk are supplied with the numerous common source code
files.
The source code was provided to serve as the basis upon which you
could develop your own enhancements to the product and to provide
you with those modules which may need to be modified for your
particular application. The latter is true of wn_frmget,
wn_iemsg, and wn_ihmsg. You should consider modifying these
routines if you want to change the way in which data entry forms
are handled when completed (wn_frmget), the way in which data
entry field help messages are displayed (wn_ihmsg), or the way
in which data entry field error messages are displayed
(wn_iemsg).
In the case of wn_frmget, the code to modify is at the tail end
of the file and is clearly labeled. Data entry Help messages are
displayed by wn_ihmsg whenever the HELP key is depressed. Data
entry error messages are displayed by wn_iemsg whenever
validation for a particular field fails. Refer to the source
code files and the descriptions of these functions in the
function synopsis section of this document.
Page: 58
The Window BOSS
Making Changes - continued.
9.3. TopSpeed C
If you do not have the Source media kit or are making a limited
number of changes or are testing a small number of changes, the
best approach to take is to modify your application's project
file to "include" an entry for the modified source code. The
example below contains an entry for a locally modified version of
wn_frmget. It is important to note that this project file will
cause the compiler to generate a warning message stating that
wn_frmget is duplicated. This is a case in which the error
message can be safely ignored.
make DOS EXE
option +case +map +pack +check -vid
model Small
include %N initexe
include wn_frmget
import %O%M_clib
import swin
Once the project file has been modified, you can use the command
line compiler or the integrated environment to test your changes.
Page: 59
The Window BOSS
Making Changes - continued.
TopSpeed C Continued.
If you have the Source media kit and would prefer to create new
libraries the following general procedure can be used.
1) Make sure that ALL of The Window BOSS "C" and "ASSEMBLER"
source files have been extracted from their respective
archives.
Make sure the following files are in the same directory as
The Window BOSS source files:
MAKESWIN.PRJ MAKEMWIN.PRJ
MAKECWIN.PRJ MAKELWIN.PRJ
MAKEXWIN.PRJ MAKEMTWI.PRJ
MAKELIB.BAT
?MSVLIB.OBJ MTMSVLIB.OBJ
2) If applicable, edit "MSVLIB.ASM" as needed. Be sure to set
LPROG and LDATA correctly. ASSEMBLE by using the command:
C>MASM /MX MSVLIB;
Model SMALL MEDIUM COMPACT LARGE XLARGE MTHREAD
LPROG FALSE TRUE FALSE TRUE TRUE TRUE
LDATA FALSE FALSE TRUE TRUE TRUE TRUE
Name SMSVLIB MMSVLIB CMSVLIB LMSVLIB XMSVLIB MTVLIB
Then rename "MSVLIB.OBJ" according to the above table.
3) If Applicable, edit the "C" level modules.
4) Use the "MAKELIB" BATch file to create the new library.
The command line Parameter to MAKELIB is a function of the
memory model of the library you are creating.
Model SMALL MEDIUM COMPACT LARGE XLARGE MTHREAD
Parm. SWIN MWIN CWIN LWIN XWIN MTWIN
For example, to create the large library:
C>MAKELIB LWIN
Page: 60
The Window BOSS
Making Changes - continued.
9.4. Microsoft, Borland, Watcom
9.5. Datalight, Zortech, CI86
9.6. Lattice, Mix Power C, Aztec
1) If applicable, edit the assembler level modules as
needed. Be sure to set LPROG and LDATA (if they apply).
ASSEMBLE.
2) If applicable, edit the "C" level modules. COMPILE.
3) Test your changes by linking the new/modified code
with the existing libraries. For example to link your
modified wn_move.c and v_getch: (Microsoft example)
C> link myapp+wn_move+msvlib,,,swin
If required, refer to your compiler documentation for
explicit instructions on linking.
4) Update the existing Window BOSS libraries with the new
"obj" files. This is done with the librarian provided
with your compiler. Alternatively, you can use the batch
files provided with the source code to recompile the
entire library and rebuild, rather than update The
Window BOSS libraries.
If required, refer to your compiler documentation for
explicit instructions on how to use their librarians to
update libraries.
Remember, the memory model of the assembly "obj" file must
correspond to the memory model of the C "obj" files and the
memory model of any existing libraries.
9.6.1. Assembly Language Object Files
The Source Media Kit now includes the object files of the
assembly language functions used by The Window BOSS. This will
free you from having to acquire, or use, an assembler unless you
intend to make changes to those functions written in assembly
language! Now, all you have to do is copy and or rename the
appropriate object file before running the "MAKELIB" batch file!
A object file matrix is provided to assist you in determining
which object file should be used with which compiler and memory
model.
Page: 61
The Window BOSS
Making Changes - continued.
9.6.2. Assembly Language Object File Matrix
The matrix that follows identifies the relationship between the
object filename, compiler memory model, and the filename used as
part of the "MAKELIB" batch utility provided as part of The
Window BOSS. Use this matrix to determine what file to rename
(or copy) when recreating Window BOSS libraries that DO NOT
include any changes or additions to existing assembly language
functions.
Object File Matrix
Compiler SMALL MEDIUM COMPACT LARGE MAKELIB NAME
QuickC 2.0 SMSVLIB MMSVLIB CMSVLIB LMSVLIB MSVLIB.OBJ
QuickC 2.5 SMSVLIB MMSVLIB CMSVLIB LMSVLIB MSVLIB.OBJ
MSC 5.X SMSVLIB MMSVLIB CMSVLIB LMSVLIB MSVLIB.OBJ
MSC 6.X SMSVLIB MMSVLIB CMSVLIB LMSVLIB MSVLIB.OBJ
Turbo C SMSVLIB MMSVLIB CMSVLIB LMSVLIB MSVLIB.OBJ
Turbo C++ STCVLIB MTCVLIB CTCVLIB LTCVLIB TCVLIB.OBJ
Watcom SWCVLIB MWCVLIB CWCVLIB LWCVLIB WCVLIB.OBJ
Express C ------- MWCVLIB ------- ------- WCVLIB.OBJ
Datalight SDLVLIB PDLVLIB DDLVLIB LDLVLIB DLVLIB.OBJ
Lattice 3 SVLIB PVLIB DVLIB LVLIB VLIB.OBJ
Lattice 6 SVLIB PVLIB DVLIB LVLIB VLIB.OBJ
Zortech SMSVLIB MMSVLIB CMSVLIB LMSVLIB MSVLIB.OBJ
CI86 SVLIB ------- ------- LVLIB VLIB.OBJ
MIX ------- PCVLIB ------- ------- PCVLIB.MIX
AZTEC SAZVLIB MAZVLIB CAZVLIB LAZVLIB AZVLIB.O
Example: Rebuild the Large model library for Microsoft C 5.X,
6.X, or Quick C.
You would:
(1) Use LCOMPILE to compile all C functions
C>LCOMPILE
(2) Copy LMSVLIB.OBJ to MSVLIB.OBJ
C>COPY LMSVLIB.OBJ MSVLIB.OBJ
(3) Rebuild the LARGE model library
C>MAKELIB LWIN
Page: 62
The Window BOSS
Making Changes - continued.
Turbo C++
The HUGE memory model generally requires the same object file as
the LARGE. Turbo C++ is the exception (use HTCVLIB.OBJ). The
following table outlines the values that LPROG, LDATA, and HUGE
need to have assigned for the various memory models. This
information is provided for those who need to modify the assembly
language files to incorporate their local changes.
Memory Model LPROG LDATA HUGE *
SMALL (64k Code, 64k Data) FALSE FALSE FALSE
MEDIUM (1MB Code, 64k Data) TRUE FALSE FALSE
COMPACT (64k Code, 1MB Data) FALSE TRUE FALSE
LARGE (1MB Code, 1MB Data) TRUE TRUE FALSE
HUGE (1MB Code, 1MB Data) * TRUE TRUE TRUE
* HUGE is only defined in TCVLIB.ASM. The HUGE memory
model allows arrays to exceed 64k.
Page: 63
The Window BOSS
Making Changes - continued.
9.6.3. Assembler Code
Selecting the Memory Model:
Computer Innovations and Lattice
1) vlib.asm Edit - Set LATTICE to 1 for Lattice.
DOS.MAC determines the memory model.
Set LATTICE to 0 for Computer Innovations.
MODEL.H determines the memory model.
2) model.h CI86 only - Set "SMALL" & "LARGE".
See MODEL.H for discussion.
Microsoft C, QuickC, Borland Turbo C, Watcom C, Zortech
1) msvlib.asm Set LDATA & LPROG to TRUE or FALSE
wcvlib.asm LDATA is TRUE for LARGE DATA
LPROG is TRUE for LARGE CODE
Assemble using:
MASM /MX MSVLIB; <- All but WATCOM
MASM /MX WCVLIB; <- WATCOM ONLY
Datalight
1) dos.mac Edit to reflect memory model.
Additionally, MACROS.ASM must be present.
Assemble using:
MASM /MX dlvlib;
MIX Power C
1) pcvlib.asm Set LDATA to FALSE, LPROG to TRUE
Assemble using:
MASM /ML PCVLIB;
Run the MIX utility on PCVLIB.OBJ
Aztec C
1) azvlib.asm Set LDATA & LPROG to TRUE or FALSE
LDATA is TRUE for LARGE DATA
LPROG is TRUE for LARGE CODE
Assemble using:
AS AZVLIB;
Page: 64
The Window BOSS
Making Changes - continued.
9.7. C Code
Pattern your enhancements after existing code. The most common
mistakes are: (1) failing to call wn_activate, (2) failing to
check for error returns, and (3) failing to rebuild the libraries
correctly.
Incorporating custom data entry functions is a straight forward
task if you follow the guidelines below.
. Pattern your data entry routine after wn_gfloat.
. Study the relationship between wn_gfloat and wn_frmget.
. Study the way in which arguments are loaded using the
unions v1 through v8.
. Edit windows.h and expand the table of data entry function
codes to include a new code above 100, for example:
#define GCUSTOM 101
The table of data entry function codes is located towards
the tail end of "windows.h" and begins with:
#define GDONE 0
. Edit wn_frmget.c and expand the large case statement to
include a case for your custom data entry function.
Pattern the code you are adding after the existing code.
. Rebuild the libraries adding your custom function and
replacing wn_frmget with the new version.
Refer to wn_gfloat and wn_frmget....
The general logic is to call the data entry function with
the argument list corresponding to this occurrence of this
type of field. The data entry function tests the value of
"fun". If it is "XEQ" then control immediately passes to the
logic that handles data entry. If fun is "SET" then the
data entry function loads the form control block (indexed by
"fld") with the arguments being passed. This sets the stage
for subsequent calls (in a predetermined order) from
wn_frmget! When called, wn_frmget first displays all the
prompt fields, and then calls the data entry functions in
the order determined by the form control block.
Page: 65
The Window BOSS
10. Library Rebuilding (MSC5.1, QC2.0, LC 3.41, DLC, C86)
Support for Microsoft C 5.1, QuickC 2.0, Lattice 3.41, Datalight,
and Computer Innovations C86 will eventually cease. At this time
Star Guidance Consulting is not distributing preconfigured
libraries for these compilers with registered versions of The
Window BOSS. We are, however, providing all the tools required
to rebuild the libraries on the end user's machine. We have also
certified these compilers to work with *this* version (see front
cover of the manual) of The Window BOSS. The steps to follow are
outlined below. The entire process should not take more than 20
minutes.
1. Unarchive CFILES.LZH
C> lharc e cfiles
2. Unarchive MS5.LZH, MSQC20.LZH, LC3.LZH, DLC, or C86
C> lharc e MS5
...
C> lharc e C86
3. Based on the memory of the library you wish to create use
one of the ?COMPILE.BAT batch files to compile all of the
"C" files. The first character of the batch file
corresponds to the memory module you wish to create. For
example, to compile for the Large memory model you
would:
C> LCOMPILE
4. Using the previously discussed "Assembly Language Object
File Matrix" copy the memory model specific "obj" file to
either MSVLIB.OBJ or VLIB.OBJ. For the large memory
model you would:
C> copy lmsvlib.obj msvlib.obj
or
C> copy lvlib.obj vlib.obj
or
C> copy ldlvlib.obj dlvlib.obj
5. Create the library using the MAKELIB batch file. Name the
library ?WIN where ? corresponds to the memory model you
are creating. For example, to build the Large library
you would:
C> MAKELIB LWIN
Thats all there is to it!
Page: 66
The Window BOSS
11. Function Call Synopsis
The Window BOSS and Data Clerk Function Library
Page: 67
The Window BOSS
11.1. wn_init -- init window system
11.2. wn_exit -- exit window system
11.3. wn_psinit() -- init window system - physical size
USAGE
wn_init()
wn_psinit(rows, columns)
int rows, columns
rows = # of rows on physical screen
cols = # of columns on physical screen
wn_exit()
wn_init() or wn_psinit() and wn_exit(), if used, should be the
first and last functions called. Both wn_init() and wn_psinit()
save the video state and application entry screen. wn_init()
or wn_psinit() is typically the very first function called in
the main program. wn_exit() restores the saved video state and
screen image. wn_exit() is typically called just prior to
calling exit().
wn_init() is the general case of wn_psinit(). It assumes a
physical screen size of 25x80 and therefore is the most
portable across video adapters.
wn_psinit() allows those who need to use either the EGA 43x80
or VGA 50x80 line modes a handy way to save the existing 43 or
50 line screen image. Examples:
wn_psinit(43,80); /* saves 43 line EGA screen */
wn_psinit(50,80); /* saves 50 line VGA screen */
RETURNS
TRUE if successful, FALSE if error.
CAUTIONS and ADDITIONAL NOTES
wn_psinit() does not check to see if the parameters passed are
valid for the adapter in use.
wn_psinit() does not change video modes based on the parameters
passed. It is the programmers responsibility to insure that
the video adapter is in the correct mode for the application.
Calling wn_psinit() with parameters greater than can be handled
by the machines video adapter can have interesting but
undesirable results.
Use of wn_psinit() should be restricted to machines equipped
with EGA or VGA adapters only.
Page: 68
The Window BOSS
11.4. wn_dmode -- set window display mode
USAGE
wn_dmode(mode)
int mode
mode = PAINT for painted windows
mode = FLASH for instant windows
wn_dmode sets the windows display mode as per mode, PAINT style
windows appear to be painted (top to bottom) where FLASH style
windows instantly appear.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
CGA, EGA, and VGA only. Updates are made directly to video
memory.
Page: 69
The Window BOSS
11.5. wn_open -- open window
USAGE
wn = (WINDOWPTR)wn_open(page, row, col, width, height, atrib,
batrib)
int page, row, col, width, height, atrib, batrib;
page - 0 500, 800, or 1000
1000 opens a borderless page
800 opens an exploding window
500 opens a window with black shadows
0 opens a bordered window (NORMAL)
row - row of upper left hand corner of the window
col - column of upper left hand corner of the window
width - INSIDE dimension (max value is 78 for a 80 column
wide display, 80 if borderless)
height- INSIDE dimension (max value is 23 for a 25 row
high display, 25 if borderless)
atrib - attribute to be used IN the window
batrib- attribute to be used for the border
wn_open is usually the first function called to create and use
a window. wn_open dynamically allocates memory to save the
area defined (by row, col, width, and height), saves the image,
opens the window and homes the logical cursor to row 0, col 0
of the window. The window is now ready to be used by the
various window management routines.
Attributes (COLORS) are defined in windows.h.
RETURNS
wn = window handle or NULL if error (no memory and/or bad
parameters can cause NULL returns)
CAUTIONS and ADDITIONAL NOTES
Width and height are inside dimensions. If you want a NORMAL
window with a work area of 10 rows and 5 columns, the width is
7 and the height is 12. Maximum values are linked to the
actual physical screen size and are dependent upon whether or
not a borderless window is being opened. The window, its
borders (if they exist), and its shadow (if it exists) must all
fit and be visible on the physical screen.
Page: 70
The Window BOSS
wn_open - continued.
The flashing cursor will not be displayed unless wn_sync() has
been called with a value of TRUE.
The window "wn" automatically becomes the top window tile upon
return.
Exploding windows are linked to the time of day clock. This is
done by reading the time of day (in ticks) directly from low
memory. If you would like to vary the explosion time it can be
done by calling the internal routine "wns_stdiv" with a long
integer constant in the range of 1 to 10. The default value is
5L. Increasing the value will cause the explosion to be
faster. For example:
wns_stdiv(10L);
Window types can not be combined. That is to say that you can
not have shadowed borderless windows, borderless exploding
windows, or exploding windows with shadows.
See Also - wn_psinit and wn_init
Page: 71
The Window BOSS
11.6. wn_title -- title window
USAGE
wn_title(wn,title)
WINDOWPTR wn;
char *title;
wn - window handle
title - string pointer to title
The title is displayed on the top border of the window using
the currently defined border attribute. The cursor is
positioned off the screen after the title is written.
RETURNS
TRUE if all is well, NULL if the title is to large to fit on
the top border or error.
CAUTIONS and ADDITIONAL NOTES
The window "wn" automatically becomes the top window tile upon
return.
11.7. wn_titla -- title window with attribute
USAGE
wn_titla(wn,title,atrib)
WINDOWPTR wn;
char *title;
int atrib;
wn - window handle
title - string pointer to title
atrib - attribute to use for text
The title is displayed on the top border of the window using
the attribute specified by atrib. The cursor is positioned off
the screen after the title is written.
RETURNS
TRUE if all is well, NULL if the title is to large to fit on
the top border or error.
CAUTIONS and ADDITIONAL NOTES
The window "wn" automatically becomes the top window tile upon
return.
Page: 72
The Window BOSS
11.8. wn_stitle -- super title window
USAGE
wn_title(wn,title,location)
WINDOWPTR wn;
char *title;
int location;
wn - window handle
title - string pointer to title
location - border location
Location can be any of the following (defined in windows.h):
WNTOPR - top right
WNTOPL - top left
WNTOPC - top center
WNBOTR - bottom right
WNBOTL - bottom left
WNBOTC - bottom center
The title is displayed on the border at the location specified
using the currently defined border attribute. The cursor is
positioned off the screen after the title is written.
RETURNS
TRUE if all is well, NULL if the title is to large to fit on
the border.
CAUTIONS and ADDITIONAL NOTES
The window "wn" automatically becomes the top window tile upon
return.
Page: 73
The Window BOSS
11.9. wn_stitla -- super title window with attribute
USAGE
wn_stitla(wn,title,atrib,location)
WINDOWPTR wn;
char *title;
int atrib;
int location;
wn - window handle
title - string pointer to title
atrib - attribute to use for text
location - border location
Location can be any of the following (defined in windows.h):
WNTOPR - top right
WNTOPL - top left
WNTOPC - top center
WNBOTR - bottom right
WNBOTL - bottom left
WNBOTC - bottom center
The title is displayed on the border at the location specified
using the using the attribute specified by atrib. The cursor
is positioned off the screen after the title is written.
RETURNS
TRUE if all is well, NULL if the title is to large to fit on
the border.
CAUTIONS and ADDITIONAL NOTES
The window "wn" automatically becomes the top window tile upon
return.
Page: 74
The Window BOSS
11.10. wn_close -- close window
USAGE
wn_close(wn)
WINDOWPTR wn;
wn - handle of a previously opened window.
wn_close removes the window specified by wn and restores the
screen area under the window to its previous contents. The
memory allocated by wn_open is returned to the free list. The
cursor is positioned to where it was located prior to the
wn_open call.
RETURNS
TRUE or NULL if error
CAUTIONS and ADDITIONAL NOTES
None.
11.11. wn_save -- save screen image
USAGE
wn = (WINDOWPTR)wn_save(page, row, col, width, height)
int page, row, col, width, height;
page - always 0.
row - row of upper left hand corner of the window
col - column of upper left hand corner of the window
width - INSIDE dimension (max value is 78)
height- INSIDE dimension (max value is 23)
wn_save can be used to save areas of the screen for purposes
other than windows.
Memory for the screen image is dynamically allocated.
RETURNS
wn = window handle or NULL if error
CAUTIONS and ADDITIONAL NOTES
The window handle returned by wn_save should only be used with
wn_restore. Use with other routines could produce unpredictable
results.
Page: 75
The Window BOSS
11.12. wn_restore -- restore saved screen image
USAGE
wn_restore(wn)
WINDOWPTR wn;
wn - handle of previously wn_save(ed) window.
Restores the screen image corresponding to the window handle
wn, and allocated memory is returned to the free list.
RETURNS
TRUE or NULL if error
CAUTIONS and ADDITIONAL NOTES
This function should only be used with window handles obtained
from wn_save.
11.13. wn_move -- move window
USAGE
wn = (WINDOWPTR)wn_move(wn,row,col)
wn - handle of window to be moved
row - destination row
col - destination column
Moves the window corresponding to wn to a new location. The
cursor is positioned off the screen after the call.
RETURNS
Window handle of the window moved or NULL if error.
CAUTIONS and ADDITIONAL NOTES
The window "wn" automatically becomes the top window tile upon
return.
Page: 76
The Window BOSS
11.14. wn_locate -- locate cursor in window
USAGE
wn_locate(wn, row, col)
WINDOWPTR wn;
int row, col;
wn - window handle
row - row to position to (relative to window origin)
col - column to position to (relative to window origin)
Position the cursor to the row and column specified. Row and
Column values are relative to the origin of the window (0,0
locates the cursor in the upper left hand corner of the window
referenced by wn).
RETURNS
TRUE or NULL if error
CAUTIONS and ADDITIONAL NOTES
Values of row & col are not checked.
The window "wn" automatically becomes the top window tile upon
return.
Page: 77
The Window BOSS
11.15. wn_printf -- window printf
USAGE
wn_printf(wn, cs, args)
WINDOWPTR wn;
char *cs;
?? arg1 ... argn;
wn - window handle
cs - format control string
args - argument list
printf function for windows!
RETURNS
TRUE or NULL if error
CAUTIONS and ADDITIONAL NOTES
Output string length is limited to 254 bytes.
Registered users can edit the wn_printf function and set the
limit to whatever they wish.
Integer only for Microsoft 3.0 and Aztec. This limitation
be overcome by using sprintf in conjunction with wn_printf.
For example:
char buf[256];
..
..
sprintf(buf,"%d %l %x\n", intval, longval, hexval);
wn_printf(wn, buf);
Full support for all others.
The window "wn" automatically becomes the top window tile upon
return.
Page: 78
The Window BOSS
11.16. wn_puts -- put string (high speed)
11.17. wn_putc -- put character
USAGE
wn_puts(wn, row, col, string)
WINDOWPTR wn;
int row, col;
char *string;
wn_putc(wn, row, col, c)
WINDOWPTR wn;
int row, col;
char c;
wn - window handle
row - row to print the string at
col - column to print the string at
string- the string to print
c - the character to print
Row and Col are relative to the origin of the window.
The cursor is displayed only if wn_synflg has been called with
a value of TRUE.
RETURNS
TRUE or NULL if error
CAUTIONS and ADDITIONAL NOTES
wn_puts writes the string directly to the video ram. Tabs, line
feeds, carriage returns and other control characters are not
filtered or processed in any way.
Range checks are not performed to insure the specified string
can be contained in the window.
The window "wn" automatically becomes the top window tile upon
return.
Page: 79
The Window BOSS
11.18. wn_gets -- get string with validation
USAGE
(char *) wn_gets(wn, buf, va, uva)
WINDOWPTR wn;
char *buf;
int va;
char *uva;
wn - window handle
buf - user buffer for string
va - input validation to be used
uva - user validation list [optional]
va specifies the type of input validation to be performed as
data is being entered. Options are:
(1) none no restrictions - accept everything
(2) integer accept: 0 thru 9 + -
(3) floating point accept: 0 thru 9 + - .
(4) alpha only accept: a thru z
(upper & lower case)
(5) upper case only accept: A thru Z
(6) validation list accept: only those characters
(optional) specified via uva string.
ORing va with 0x8000 disables data entry character echo.
The following editing functions are supported:
. backspace & rubout do the logical things
. ^U, ^X, and ^C wipe the field clean
. Return and Esc end the input function
Data entry takes place at the current logical cursor location.
You can, of course, position the cursor to where you wish
prior to calling wn_gets.
Example:
wn_printf(wn,"Enter your name > ");
wn_gets(wn,buf,4,0);
RETURNS
Pointer to buf or NULL if error
CAUTIONS and ADDITIONAL NOTES
The window "wn" automatically becomes the top window tile upon
return. This function is provided for historical purposes,
more complete and flexible functions are included as part of
the Data Clerk.
Page: 80
The Window BOSS
11.19. wn_putsa -- put string and attribute (high speed)
11.20. wn_putca -- put character and attribute
USAGE
wn_putsa(wn, row, col, string, atrib)
WINDOWPTR wn;
int row, col;
char *string;
int atrib;
wn_putca(wn, row, col, c, atrib)
WINDOWPTR wn;
int row, col;
char c;
int atrib;
wn - window handle
row - row to print the string at
col - column to print the string at
string- the string to print
c - the character to print
atrib - attribute to be used with string
Row and Col are relative to the origin of the window.
The cursor is displayed only if wn_synflg has been called with
a value of TRUE.
RETURNS
TRUE or NULL if error
CAUTIONS and ADDITIONAL NOTES
wn_puts writes the string directly to the video ram. Tabs, line
feeds, carriage returns and other control characters are not
filtered or processed in any way.
Range checks are not performed to insure the specified string
can be contained in the window.
The window "wn" automatically becomes the top window tile upon
return.
Page: 81
The Window BOSS
11.21. wn_insrow -- insert row in window
USAGE
wn_insrow(wn, row)
WINDOWPTR wn;
int row;
wn - window handle
row - row at which a line is to be inserted
Row is relative to the origin of the window. All lines below
the row specified are scrolled down. The currently defined
window attribute is used to clear the lines inserted.
RETURNS
TRUE or NULL if error
CAUTIONS and ADDITIONAL NOTES
The window "wn" automatically becomes the top window tile upon
return.
11.22. wn_delrow -- delete row from window
USAGE
wn_delrow(wn, row)
WINDOWPTR wn;
int row;
wn - window handle
row - row at which a line is to be deleted
Row is relative to the origin of the window. All lines below
the row specified are scrolled up. The currently defined window
attribute is used to clear the lines inserted.
RETURNS
TRUE or NULL if error
CAUTIONS and ADDITIONAL NOTES
The window "wn" automatically becomes the top window tile upon
return.
Page: 82
The Window BOSS
11.23. wn_clr -- clear window
USAGE
wn_clr(wn)
WINDOWPTR wn;
wn - window handle
The window corresponding to wn is cleared (mini clear screen).
The currently defined window attribute is used to clear the
interior of the window.
The windows virtual cursor is homed.
RETURNS
TRUE or NULL if error
CAUTIONS and ADDITIONAL NOTES
The window "wn" automatically becomes the top window tile upon
return.
11.24. wn_activate -- activate window
USAGE
wn_activate(wn)
WINDOWPTR wn;
wn - window handle
Activate a previously opened window. The window specified by
"wn" becomes the top window tile.
RETURNS
TRUE or NULL if error
CAUTIONS and ADDITIONAL NOTES
None.
Page: 83
The Window BOSS
11.25. wn_color -- set window & border attribute
USAGE
wn_color(wn, atrib, batrib)
WINDOWPTR wn;
unsigned int atrib, batrib;
wn - window handle
atrib - attribute to be used for the window
batrib- attribute to be used for the border
wn_color sets the attribute to be used for all subsequent
operations in the window. The attribute byte contains the
background specific data in the upper 4 bits and the foreground
specific data in the lower 4 bits. Color and bit definitions
can be found in windows.h. You can use a statement of the form:
atrib = (bground << 4 | fground);
to set the attribute to the correct format.
Attributes are defined in windows.h.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
None.
Page: 84
The Window BOSS
11.26. wn_wrap -- set/clear line wrap flag
USAGE
wn_wrap(wn, flag)
WINDOWPTR wn;
int flag;
wn - window handle
flag - wrap flag (TRUE or FALSE)
Sets the line wrap flag for window functions. If line wrap is
true, output that exceeds the width of a window is
automatically placed on the next line. When the line wrap flag
is false, output that exceeds the width of the window is lost.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
None.
11.27. wn_sync -- set/clear cursor synchronization flag
USAGE
wn_sync(wn, flag)
WINDOWPTR wn;
int flag;
wn - window handle
flag - synchronization flag (TRUE or FALSE)
When wn_sync is called with a value of TRUE all subsequent text
output to the window will have a flashing (normal) cursor
displayed following the last character output. Calling wn_sync
with a value of false inhibits the cursor from physically
advancing (it is always logically advanced).
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
None.
Page: 85
The Window BOSS
11.28. wn_scroll -- set scrolling method for window
USAGE
wn_scroll(wn,method)
WINDOWPTR wn;
int method;
wn - window handle.
method - BIOS or DMAS
Set the method to be used to scroll the contents of the window
to use either the ROM BIOS (BIOS), or the flicker free DMA
logic. BIOS and DMAS are defined in "windows.h".
The default scrolling mode is DMAS.
The Window BOSS incorporates machine independent logic that
ensures that scrolling on color systems is performed in such a
way as to totally eliminate snow and flicker. This logic,
although bulletproof, can slow scrolling down. Setting the
scrolling method to BIOS provides a machine independent way to
improve the scrolling speed with a (perhaps) proportional
increase in flicker. Keep in mind that recent developments in
CGA and EGA technology have, for the most part, eliminated
scrolling flicker at the hardware level. If your system is
equipped with one of these boards, you may achieve a
noticeable improvement in scrolling speed by using wn_scroll()
to set the scrolling method to BIOS. Additionally, there are
several console device drivers (FANSI and NANSI to mention
two) that "patch" the BIOS routines to achieve the same
result.
Setting the scrolling method to BIOS when wn_dmaflg=FALSE has
no effect.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
Color systems only.
Page: 86
The Window BOSS
11.29. wn_dma -- set/clear write RAM directly flag
USAGE
wn_dma(flag)
int flag;
flag - write to video RAM flag (TRUE or FALSE).
The windowing routines assume that your video card supports
direct access to the video RAM (normal for monochrome
monitors).
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
None.
11.30. wn_fixcsr -- update window cursor position
USAGE
wn_fixcsr(wn)
WINDOWPTR wn;
wn - window handle
wn_fixcsr is a companion routine to wn_sync. Causes the
physical cursor to be placed at the logical cursor location.
It is typically called after wn_sync has been called to disable
cursor synchronization. wn_fixcsr does not alter the state of
the windows cursor synchronization flag.
RETURNS
TRUE or NULL if error
CAUTIONS and ADDITIONAL NOTES
The window "wn" automatically becomes the top window tile upon
return.
Page: 87
The Window BOSS
11.31. wn_boxset -- set box drawing character set
USAGE
wn_boxset(ul, ur, tb, sd, ll, lr);
int ul, ur, tb, sd, ll, lr;
ul - upper left corner character
ur - upper right corner character
tb - top/bottom line character
sd - left/right side character
ll - lower left corner character
lr - lower right corner character
wn_boxset set the characters to be used to frame all future
windows.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
None.
11.32. wn_natrib -- set new attribute in window NOW!
USAGE
wn_natrib(wn,atrib)
WINDOWPTR wn;
int atrib;
wn - window handle
atrib - attribute to set the window specified by wn to.
The attributes of the window are changed immediately.
Attributes are defined in window.h
The border is not altered.
RETURNS
TRUE or NULL if error
CAUTIONS and ADDITIONAL NOTES
The window "wn" automatically becomes the top window tile upon
return.
Page: 88
The Window BOSS
11.33. wn_dborder -- draw (replace) border on window
USAGE
wn_dborder(wn, ul, ur, tb, sd, ll, lr);
WINDOWPTR wn;
int ul, ur, tb, sd, ll, lr;
wn - window handle
ul - upper left corner character
ur - upper right corner character
tb - top/bottom line character
sd - left/right side character
ll - lower left corner character
lr - lower right corner character
The currently defined border attribute is used when drawing the
border.
RETURNS
TRUE or NULL if error
CAUTIONS and ADDITIONAL NOTES
The window "wn" automatically becomes the top window tile upon
return.
Page: 89
The Window BOSS
11.34. wn_input -- general purpose window input
USAGE
wn_input(wn, row, col, prmpt, mask, fill, atrib, ubuff,hlpmsg)
(WINDOWPTR) wn - window pointer
int row - row in window where prompt is displayed
int col - col in window where prompt is displayed
char * prmpt - field prompt
char * mask - data entry mask
char fill - fill character
unsigned atrib - attributes to be used
(fground<<4 | background)
char * ubuff - user text buffer of MAXSTR size
char * hlpmsg- user help message - displayed
when HELP is pressed. F1 is the default
HELP key. This can be changed by calling
the wn_shkey() function.
wn_input is the Data Clerk's kernel. It is called by
virtually all the higher level data entry functions.
RETURNS:
NULL if error, else non zero value (ASCII value of last
valid exit key).
Sets the global "wns_escape" to TRUE if the ESCape key was
pressed causing wn_input to terminate. Set to FALSE
otherwise.
CAUTIONS and ADDITIONAL NOTES:
prmpt - If a prompt message is not to be provided, wn_input
should be called with NSTR (null string) in the
place of the prompt message text pointer, for
example:
wn_input(wn,row,col,NSTR,mask,fill,atrib,ubuff,hlpmsg)
+--+
#defined in windows.h --^
The prompt is displayed with the current window
attributes at the row and column specified in the
call. Data entry begins immediately after the
prompt.
Page: 90
The Window BOSS
wn_input -- continued.
mask - The mask determines what type of data may be entered
on a character by character basis. The control
characters are as follows:
# - Number (0 thru 9, -, +)
a - Any ASCII character
(0x01 thru 0xff excluding 0x08)
x - Same as 'a', but without echo (password)
t - Any printable ASCII char (' ' thru '~')
l - lower case character (a thru z)
u - upper case character (A thru Z)
Mask Examples:
Date Mask "##/##/##"
Time Mask "##:##:##"
Integer Mask "#######"
Float Mask "FFFF.FF"
Phone Number "(###) ###-####"
Upper Case Mask "uuuuu" or "UUUUU"
Lower Case Mask "lllll" or "LLLLL"
ASCII Mask "aaaaa" or "AAAAA"
No Echo ASCII "xxxxx" or "XXXXX"
Text Mask "ttttt" or "TTTTT"
fill - The character to be used to fill the field where
mask characters appear. The typical choice for fill
char is '_'.
help - If a HELP message is not to be provided, wn_input
should be called with NSTR (null string) in the
place of the help message text pointer, for example:
wn_input(wn,row,col,NSTR,mask,fill,atrib,ubuff,NSTR)
+--+
#defined in windows.h --^
wn_ihmsg is called to display this message whenever
the HELP key is depressed while the cursor is in the
field. F1 is the default HELP key. This can be
changed by calling the wn_shkey() function.
Page: 91
The Window BOSS
wn_input -- continued.
ubuff - Editing buffer. Must be of sufficient size to hold
the data as it is entered. Typical size is the
length of the mask + 2 bytes (strlen(mask)+2).
Maximum length is MAXSTR.
On entry the first byte of ubuff should be a null,
otherwise wn_input assumes there is valid data there
and will enter edit mode. This can be handy if
there is a need for prefilled, but editable fields.
In actual practice, wn_input uses this buffer for
both initial character data entry and subsequent
editing.
On return, ubuff contains the actual data entered in
character format with fill and mask characters as
spaces (e.g. "Now is the time ").
ubuff is returned left justified for non numeric
masks. If a completely numeric mask (#) was
specified and the mask does not contain any other
characters, ubuff is returned right justified.
Page: 92
The Window BOSS
wn_input -- continued.
Editing Keys
Pressing the ESCape, RETURN/ENTER, UARROW, or DARROW
key terminates input. Since wn_input can be called
alone, or from any of the custom data entry routines
wn_gint, (wn_gfloat via wn_frmget), etc., wn_input
must be able to exit in a variety of ways. If
wn_input has been called as the result of a call to
wn_frmget, the UARROW and DARROW keys move to the
previous and next fields respectively. The global
wns_escape is set to TRUE if the ESCape key caused
wn_input to terminate (set to FALSE otherwise).
Backspace and the cursor RIGHT ARROW and LEFT ARROW
can be used to position the cursor during entry. The
space bar can also be pressed when entering numeric
fields provided that no "digits", "+", or "-" has
been struck. Naturally, the HOME and END key work in
a predictable fashion as do the INSert and DELete
keys. The HOME key positions the cursor at the start
of the field, END to end of the field. The INSert
key inserts a space at the current cursor position
(pushing the contents of the field to the right.
DELete deletes the character at the cursor location
(dragging the contents of the field to the left).
When the field fills and RETURN/ENTER has not been
struck, the cursor waits at the end of the field for
RETURN/ENTER to be pressed. You may also press
Backspace, HOME, or LEFT ARROW - these allow the
field to be edited again.
The cursor shape indicates whether or not data can
be entered, or if you are beyond the fields edge.
The cursor is half size (bottom half) when data can
be entered, and half size (top half) when you are
beyond the edge of the field.
BELLs automatically ring when you strike an invalid
key or attempt to enter data beyond the edge of the
field.
Page: 93
The Window BOSS
wn_input -- continued.
Miscellaneous
Choose your fill character wisely, as you can not
enter that character as data in a field.
The data entry routines are pointer intensive.
Failure to insure that they are called with
arguments of the right type, size, and dimension
will certainly cause undesired results.
Page: 94
The Window BOSS
11.35. wn_frmopn -- open data entry form
USAGE
wn_frmopn(nfields)
int nfields - number of fields in form plus 1.
RETURNS:
Pointer to an array of field control blocks. (WIFORM)
or
NULL if error (memory could not be allocated)
CAUTIONS and ADDITIONAL NOTES:
If wn_frmopn returns NULL, no attempt should be made to use
the data entry form in question. NULL indicates that memory
could not be allocated for the form!
This routine must be called before wn_frmget and wn_frmcls.
If your form contains 4 fields the call wn_frmopn as
follows:
WIFORM frm;
frm = wn_frmopn(5);
Fields are sequentially numbered starting from 0 ending at
nfields-2. The extra field is used for internal purposes.
Refer to "SAMPLE.C" for example(s) of usage.
Page: 95
The Window BOSS
11.36. wn_frmget -- get (read) data entry form
USAGE
wn_frmget(frm)
WIFORM frm - valid field pointer.
RETURNS:
TRUE - indicating all fields of the form in question have
been fetched and verified (where required).
ESC_CODE - indicating ESCape was pressed and form processing
was terminated.
or
Never Returns!!
CAUTIONS and ADDITIONAL NOTES:
As provided, wn_frmget is very usable, however, you may wish
to modify it (source has been provided for this purpose) to
include some of your own custom forms or the way in which
forms are processed when completed.
As distributed, wn_frmget first displays all field prompts
and then positions to the first field, performs data entry
on a field by field basis from the first to the last
(allowing editing along the way), asks for a confirmation to
accept the fields on the form after the last field is
entered, either accepts the form, or drops into edit mode
for all the fields on the form starting at the first field.
Refer to wn_input for a discussion of editing keys during
data entry.
wn_frmget will not return unless ESCape is pressed or all
data has been entered and verified (where required).
This routine must be called after wn_frmopn, and before
wn_frmcls.
Refer to "SAMPLE.C" for example(s) of usage.
Page: 96
The Window BOSS
11.37. wn_frmcls -- close data entry form
USAGE
wn_frmcls(frm)
(WIFORM) frm - pointer to an array of field control blocks
RETURNS:
TRUE
CAUTIONS and ADDITIONAL NOTES:
This routine should only be called if memory is scarce or
there is no further need for the form you wish to close.
Once a form is closed, all traces of it vanish, the only way
to get it back is to start from scratch with wn_frmopn,
wn_frmget and so on.
Closing a form has no impact on its visual image, just its
logical existence. If you wish to make a form vanish both
logically and visually - close the window it is anchored to
after, and only after, closing the form.
In this release, a form is not automatically closed when the
window to which it is anchored is closed.
Refer to "SAMPLE.C" for example(s) of usage.
Page: 97
The Window BOSS
11.38. wn_gdate - input date in window
USAGE
wn_gdate(fun,frm,fld,wn,row,col,prmpt,atrib,fill,month,day,year,
ubuff,hlpmsg,errmsg)
int fun - function code (SET || XEQ)
(WIFORM) frm - form pointer (actual || NFRM)
int fld - field # in form (actual || NULL)
(WINDOWPTR) wn - window pointer
int row - row in window where data input begins
int col - col in window where data input begins
(char *) prmpt - field prompt (call with NSTR for none)
unsigned atrib - field (not prompt) attributes
char fill - field fill character
(int *) month - pointer to int for month (1-12)
(int *) day - pointer to int for day (1-31)
(int *) year - pointer to int for year (0-99)
(char *) ubuff - pointer to char array of 10 bytes
(char *)hlpmsg - pointer to help message
(call with NSTR for none)
(char *)errmsg - pointer to err message
(call with NSTR for none)
RETURNS:
month, day, and year via pointers.
NULL if error, else the non zero value returned from
wn_input.
"wns_escape" is set to TRUE if the ESCape key caused
wn_input to terminate. Set to FALSE otherwise.
CAUTIONS and ADDITIONAL NOTES:
fun - fun can only be SET for form setup, or XEQ for
immediate execution. When called with SET, valid
arguments for both "frm" and "fld" must be specified.
frm is the field pointer returned from wn_frmopn(), and
fld is the field sequence number in the form for this
field. When called with XEQ frm must be NFRM and fld
must be NFLD.
ubuff - Editing buffer. Must be of sufficient size to hold
the data as it is entered. Minimum size is 10.
Page: 98
The Window BOSS
wn_gdate continued.
On entry, the first byte of ubuff should be a null,
otherwise wn_input assumes there is valid data there
and will enter edit mode. This can be handy if there
is a need for prefilled, but editable fields. In
actual practice, wn_input uses this buffer for both
initial character data entry and subsequent editing.
On return, ubuff contains the actual data entered in
character format with fill and mask characters as
spaces (e.g. "12 12 88").
Only basic reasonability checks are made. Therefore, dates
like 02/31/88 can be returned.
Calls wn_input to perform data entry.
Data must satisfy validation checks for function to return.
Refer to "SAMPLE.C" for example(s) of usage.
Page: 99
The Window BOSS
11.39. wn_gtime -- input time in window
USAGE
wn_gtime(fun,frm,fld,wn,row,col,prmpt,atrib,fill,hrs,mins,
secs,ubuff,hlpmsg,errmsg)
int fun - function code (SET || XEQ)
(WIFORM) frm - form pointer (actual || NFRM)
int fld - field # in form (actual || NFLD)
(WINDOWPTR) wn - window pointer
int row - row in window where data input begins
int col - col in window where data input begins
(char *) prmpt - field prompt (call with NSTR for none)
unsigned atrib - field (not prompt) attributes
char fill - field fill character
(int *) hrs - pointer to int for hours (0-24)
(int *) mins - pointer to int for minutes (0-59)
(int *) secs - pointer to int for seconds (0-59)
(char *) ubuff - pointer to char array of 10 bytes
(char *)hlpmsg - pointer to help message
(call with NSTR for none)
(char *)errmsg - pointer to err message
(call with NSTR for none)
RETURNS:
hrs, mins, and secs via pointers.
NULL if error, else the non zero value returned from
wn_input.
"wns_escape" is set to TRUE if the ESCape key caused
wn_input to terminate. Set to FALSE otherwise.
CAUTIONS and ADDITIONAL NOTES:
fun - fun can only be SET for form setup, or XEQ for
immediate execution. When called with SET, valid
arguments for both "frm" and "fld" must be specified.
frm is the field pointer returned from wn_frmopn(), and
fld is the field sequence number in the form for this
field. When called with XEQ frm must be NFRM and fld
must be NFLD.
Page: 100
The Window BOSS
wn_gtime - continued.
ubuff - Editing buffer. Must be of sufficient size to hold
the data as it is entered. Minimum size is 10.
On entry, the first byte of ubuff should be a null,
otherwise wn_input assumes there is valid data there
and will enter edit mode. This can be handy if there
is a need for prefilled, but editable fields. In
actual practice, wn_input uses this buffer for both
initial character data entry and subsequent editing.
On return, ubuff contains the actual data entered in
character format with fill and mask characters as
spaces (e.g. "23 59 22").
Only basic reasonability checks are made. Therefore, times
like 24:59:59 can be returned.
Calls wn_input to perform data entry.
Data must satisfy validation checks for function to return.
Refer to "SAMPLE.C" for example(s) of usage.
Page: 101
The Window BOSS
11.40. wn_gphone -- input phone number in window
USAGE
wn_gphone(fun,frm,fld,wn,row,col,prmpt,atrib,fill,acode,
nnx,num,ubuff,hlpmsg,errmsg)
int fun - function code (SET || XEQ)
(WIFORM) frm - form pointer (actual || NFRM)
int fld - field # in form (actual || NFLD)
(WINDOWPTR) wn - window pointer
int row - row in window where data input begins
int col - col in window where data input begins
(char *) prmpt - field prompt (call with NSTR for none)
unsigned atrib - field (not prompt) attributes
char fill - field fill character
(int *) acode - pointer to int for area code (3 digits)
(int *) nnx - pointer to int for nnx (3 digits)
(int *) num - pointer to int for number (4 digits)
(char *) ubuff - pointer to char array of 18 bytes
(char *)hlpmsg - pointer to help message
(call with NSTR for none)
(char *)errmsg - pointer to err message
(call with NSTR for none)
RETURNS:
acode, nnx, and num via pointers.
NULL if error, else the non zero value returned from
wn_input.
"wns_escape" is set to TRUE if the ESCape key caused
wn_input to terminate. Set to FALSE otherwise.
CAUTIONS and ADDITIONAL NOTES:
fun - fun can only be SET for form setup, or XEQ for
immediate execution. When called with SET, valid
arguments for both "frm" and "fld" must be specified.
frm is the field pointer returned from wn_frmopn(), and
fld is the field sequence number in the form for this
field. When called with XEQ frm must be NFRM and fld
must be NFLD.
Page: 102
The Window BOSS
wn_gphone - continued.
ubuff - Editing buffer. Must be of sufficient size to hold
the data as it is entered. Minimum size is 18 bytes.
On entry, the first byte of ubuff should be a null,
otherwise wn_input assumes there is valid data there
and will enter edit mode. This can be handy if there
is a need for prefilled, but editable fields. In
actual practice, wn_input uses this buffer for both
initial character data entry and subsequent editing.
On return, ubuff contains the actual data entered in
character format with fill and mask characters as
spaces (e.g. 800 555 1212).
No validation is performed.
Leaving the field blank returns 0 for ACODE, NNX, and NUM.
Calls wn_input to perform data entry.
Refer to "SAMPLE.C" for example(s) of usage.
Page: 103
The Window BOSS
11.41. wn_gtext -- input text in window
11.42. wn_gutext -- input upper case text in window
11.43. wn_gltext -- input lower case text in window
11.44. wn_gatext -- input text & graphics characters
USAGE
wn_gtext(fun,frm,fld,wn,row,col,prmpt,atrib,fill,fwidth,
ubuff,hlpmsg,errmsg)
wn_gutext(..same as wn_gtext)
wn_gltext(..same as wn_gtext)
wn_gatext(..same as wn_gtext)
int fun - function code (SET || XEQ)
(WIFORM) frm - form pointer (actual || NFRM)
int fld - field # in form (actual || NFLD)
(WINDOWPTR) wn - window pointer
int row - row in window where data input begins
int col - col in window where data input begins
(char *) prmpt - field prompt (call with NSTR for none)
unsigned atrib - field (not prompt) attributes
char fill - field fill character
int fwidth - width of mask (maximum # of digits is MAXSTR)
(char *) ubuff - pointer to char array of fwidth+2 bytes
(char *)hlpmsg - pointer to help message
(call with NSTR for none)
(char *)errmsg - pointer to err message
(call with NSTR for none)
RETURNS:
ubuff with text data via pointer.
NULL if error, else the non zero value returned from
wn_input.
"wns_escape" is set to TRUE if the ESCape key caused
wn_input to terminate. Set to FALSE otherwise.
CAUTIONS and ADDITIONAL NOTES:
wn_gatext - wn_gatext allows graphics characters to be input. It
is otherwise identical to wn_gtext.
fun - fun can only be SET for form setup, or XEQ for
immediate execution. When called with SET, valid
arguments for both "frm" and "fld" must be specified.
frm is the field pointer returned from wn_frmopn(), and
fld is the field sequence number in the form for this
field. When called with XEQ frm must be NFRM and fld
must be NFLD.
Page: 104
The Window BOSS
wn_gtext - continued.
ubuff - Editing buffer. Must be of sufficient size to hold
the data as it is entered. Minimum size is fwidth+2.
On entry, the first byte of ubuff should be a null,
otherwise wn_input assumes there is valid data there
and will enter edit mode. This can be handy if there
is a need for prefilled, but editable fields. In
actual practice, wn_input uses this buffer for both
initial character data entry and subsequent editing.
On return, ubuff contains the actual data entered in
character format with fill and mask characters as
spaces (e.g. "This is a line of text ").
Case conversion is automatically performed when
wn_gutext() or wn_gltext() are called.
Calls wn_input to perform data entry.
No validation is performed.
Refer to "SAMPLE.C" for example(s) of usage.
Page: 105
The Window BOSS
11.45. wn_gpword -- input password in window
USAGE
wn_gpword(fun,frm,fld,wn,row,col,prmpt,atrib,fill,fwidth,
ubuff,hlpmsg,errmsg)
int fun - function code (SET || XEQ)
(WIFORM) frm - form pointer (actual || NFRM)
int fld - field # in form (actual || NFLD)
(WINDOWPTR) wn - window pointer
int row - row in window where data input begins
int col - col in window where data input begins
(char *) prmpt - field prompt (call with NSTR for none)
unsigned atrib - field (not prompt) attributes
char fill - field fill character
int fwidth - width of mask (maximum # of digits is MAXSTR)
(char *) ubuff - pointer to char array of fwidth+2 bytes
(char *)hlpmsg - pointer to help message
(call with NSTR for none)
(char *)errmsg - pointer to err message
(call with NSTR for none)
RETURNS:
ubuff with text data via pointer.
NULL if error, else the non zero value returned from
wn_input.
"wns_escape" is set to TRUE if the ESCape key caused
wn_input to terminate. Set to FALSE otherwise.
CAUTIONS and ADDITIONAL NOTES:
fun - fun can only be SET for form setup, or XEQ for
immediate execution. When called with SET, valid
arguments for both "frm" and "fld" must be specified.
frm is the field pointer returned from wn_frmopn(), and
fld is the field sequence number in the form for this
field. When called with XEQ frm must be NFRM and fld
must be NFLD.
ubuff - Editing buffer. Must be of sufficient size to hold
the data as it is entered. Minimum size is fwidth+2.
On entry, the first byte of ubuff should be a null.
Since this function is for PASSWORD entry, editing is
not available. The contents of the edit buffer on
entry is ignored.
Page: 106
The Window BOSS
wn_gpword - continued.
On return, ubuff contains the actual data entered in
character format with fill and mask characters as
spaces (e.g. "This is a line of text ").
Calls wn_input to perform data entry.
No validation is performed.
Page: 107
The Window BOSS
11.46. wn_gint -- input integer in window
USAGE
wn_gint(fun,frm,fld,wn,row,col,prmpt,atrib,fill,value,
fwidth,low,high,ubuff,hlpmsg,errmsg)
int fun - function code (SET || XEQ)
(WIFORM) frm - form pointer (actual || NFRM)
int fld - field # in form (actual || NFLD)
(WINDOWPTR) wn - window pointer
int row - row in window where data input begins
int col - col in window where data input begins
(char *) prmpt - field prompt (call with NSTR for none)
unsigned atrib - field (not prompt) attributes
char fill - field fill character
(int *) value - pointer to int for return value (low-high)
int fwidth - width of mask
(maximum # of digits is 6 with sign)
int low - minimum value (lower limit of value)
int high - maximum value (upper limit of value)
(char *) ubuff - pointer to char array of 10 bytes
(char *)hlpmsg - pointer to help message
(call with NSTR for none)
(char *)errmsg - pointer to err message
(call with NSTR for none)
RETURNS:
value via pointer.
NULL if error, else the non zero value returned from
wn_input.
"wns_escape" is set to TRUE if the ESCape key caused
wn_input to terminate. Set to FALSE otherwise.
CAUTIONS and ADDITIONAL NOTES:
fun - fun can only be SET for form setup, or XEQ for
immediate execution. When called with SET, valid
arguments for both "frm" and "fld" must be specified.
frm is the field pointer returned from wn_frmopn(), and
fld is the field sequence number in the form for this
field. When called with XEQ frm must be NFRM and fld
must be NFLD.
Page: 108
The Window BOSS
wn_gint - continued.
ubuff - Editing buffer. Must be of sufficient size to hold
the data as it is entered. Minimum size is 10 bytes.
On entry, the first byte of ubuff should be a null,
otherwise wn_input assumes there is valid data there
and will enter edit mode. This can be handy if there
is a need for prefilled, but editable fields. In
actual practice, wn_input uses this buffer for both
initial character data entry and subsequent editing.
On return, ubuff contains the actual data entered in
character format with fill and mask characters as
spaces.
Calls wn_input to perform data entry.
Data must satisfy validation checks for function to return.
Calls wn_iemsg(errmsg) when validation fails.
Refer to "SAMPLE.C" for example(s) of usage.
Page: 109
The Window BOSS
11.47. wn_guint - input unsigned integer in window
USAGE
wn_guint(fun,frm,fld,wn,row,col,prmpt,atrib,fill,v,
fwidth,low,high,ubuff,hlpmsg,errmsg)
int fun - function code (SET || XEQ)
(WIFORM) frm - form pointer (actual || NFRM)
int fld - field # in form (actual || NFLD)
(WINDOWPTR)wn - window pointer
int row - row in window where data input begins
int col - col in window where data input begins
(char *) prmpt - field prompt (call with NSTR for none)
unsigned atrib - field (not prompt) attributes
char fill - field fill character
(unsigned *) v - pointer to int for return value (low-high)
int fwidth - width of mask
(maximum # of digits is 6 with sign)
unsigned low - minimum value (lower limit of value)
unsigned high - maximum value (upper limit of value)
(char *) ubuff - pointer to char array of 10 bytes
(char *)hlpmsg - pointer to help message
(call with NSTR for none)
(char *)errmsg - pointer to err message
(call with NSTR for none)
RETURNS:
v via pointer.
NULL if error, else the non zero value returned from
wn_input.
"wns_escape" is set to TRUE if the ESCape key caused
wn_input to terminate. Set to FALSE otherwise.
CAUTIONS and ADDITIONAL NOTES:
fun - fun can only be SET for form setup, or XEQ for
immediate execution. When called with SET, valid
arguments for both "frm" and "fld" must be specified.
frm is the field pointer returned from wn_frmopn(), and
fld is the field sequence number in the form for this
field. When called with XEQ frm must be NFRM and fld
must be NFLD.
Page: 110
The Window BOSS
wn_guint - continued.
ubuff - Editing buffer. Must be of sufficient size to hold
the data as it is entered. Minimum size is 10 bytes.
On entry, the first byte of ubuff should be a null,
otherwise wn_input assumes there is valid data there
and will enter edit mode. This can be handy if there
is a need for prefilled, but editable fields. In
actual practice, wn_input uses this buffer for both
initial character data entry and subsequent editing.
On return, ubuff contains the actual data entered in
character format with fill and mask characters as
spaces (e.g. "-24000").
Calls wn_input to perform data entry.
Data must satisfy validation checks for function to return.
Calls wn_iemsg(errmsg) when validation fails.
Refer to "SAMPLE.C" for example(s) of usage.
Page: 111
The Window BOSS
11.48. wn_glong -- input long integer in window
USAGE
wn_glong(fun,frm,fld,wn,row,col,prmpt,atrib,fill,value,
fwidth,low,high,ubuff,hlpmsg,errmsg)
int fun - function code (SET || XEQ)
(WIFORM) frm - form pointer (actual || NFRM)
int fld - field # in form (actual || NFLD)
(WINDOWPTR) wn - window pointer
int row - row in window where data input begins
int col - col in window where data input begins
(char *) prmpt - field prompt (call with NSTR for none)
unsigned atrib - field (not prompt) attributes
char fill - field fill character
(long*) value - pointer to long for return value (low-high)
int fwidth - width of mask
(maximum # of digits is 10 with sign)
long low - minimum value (lower limit of value)
long high - maximum value (upper limit of value)
(char *) ubuff - pointer to char array of fwidth+2 bytes
(char *)hlpmsg - pointer to help message
(call with NSTR for none)
(char *)errmsg - pointer to err message
(call with NSTR for none)
RETURNS:
v via pointer.
NULL if error, else the non zero value returned from
wn_input.
"wns_escape" is set to TRUE if the ESCape key caused
wn_input to terminate. Set to FALSE otherwise.
CAUTIONS and ADDITIONAL NOTES:
fun - fun can only be SET for form setup, or XEQ for
immediate execution. When called with SET, valid
arguments for both "frm" and "fld" must be specified.
frm is the field pointer returned from wn_frmopn(), and
fld is the field sequence number in the form for this
field. When called with XEQ frm must be NFRM and fld
must be NFLD.
Page: 112
The Window BOSS
wn_glong - continued.
ubuff - Editing buffer. Must be of sufficient size to hold
the data as it is entered. Minimum size is fwidth+2.
On entry, the first byte of ubuff should be a null,
otherwise wn_input assumes there is valid data there
and will enter edit mode. This can be handy if there
is a need for prefilled, but editable fields. In
actual practice, wn_input uses this buffer for both
initial character data entry and subsequent editing.
On return, ubuff contains the actual data entered in
character format with fill and mask characters as
spaces (e.g. "-24000").
Calls wn_input to perform data entry.
Data must satisfy validation checks for function to return.
Calls wn_iemsg(errmsg) when validation fails.
Refer to "SAMPLE.C" for example(s) of usage.
Page: 113
The Window BOSS
11.49. wn_gulong -- input unsigned long integer in window
USAGE
wn_gulong(fun,frm,fld,wn,row,col,prmpt,atrib,fill,value,
fwidth,low,high,ubuff,hlpmsg,errmsg)
int fun - function code (SET || XEQ)
(WIFORM) frm - form pointer (actual || NFRM)
int fld - field # in form (actual || NFLD)
(WINDOWPTR) wn - window pointer
int row - row in window where data input begins
int col - col in window where data input begins
(char *) prmpt - field prompt (call with NSTR for none)
unsigned atrib - field (not prompt) attributes
char fill - field fill character
(unsigned long*) value -
pointer to long for return value (low-high)
int fwidth - width of mask
(maximum # of digits is 10 with sign)
unsigned long low -
minimum value (lower limit of value)
unsigned long high -
maximum value (upper limit of value)
(char *) ubuff - pointer to char array of fwidth+2 bytes
(char *)hlpmsg - pointer to help message
(call with NSTR for none)
(char *)errmsg - pointer to err message
(call with NSTR for none)
RETURNS:
v via pointer.
NULL if error, else the non zero value returned from
wn_input.
"wns_escape" is set to TRUE if the ESCape key caused
wn_input to terminate. Set to FALSE otherwise.
CAUTIONS and ADDITIONAL NOTES:
fun - fun can only be SET for form setup, or XEQ for
immediate execution. When called with SET, valid
arguments for both "frm" and "fld" must be specified.
frm is the field pointer returned from wn_frmopn(), and
fld is the field sequence number in the form for this
field. When called with XEQ frm must be NFRM and fld
must be NFLD.
Page: 114
The Window BOSS
wn_gulong - continued.
ubuff - Editing buffer. Must be of sufficient size to hold
the data as it is entered. Minimun size is fwidth+2.
On entry, the first byte of ubuff should be a null,
otherwise wn_input assumes there is valid data there
and will enter edit mode. This can be handy if there
is a need for prefilled, but editable fields. In
actual practice, wn_input uses this buffer for both
initial character data entry and subsequent editing.
On return, ubuff contains the actual data entered in
character format with fill and mask characters as
spaces (e.g. "-24000").
Calls wn_input to perform data entry.
Data must satisfy validation checks for function to return.
Calls wn_iemsg(errmsg) when validation fails.
Page: 115
The Window BOSS
11.50. wn_gfloat -- input float in window
USAGE
wn_gfloat(fun,frm,fld,wn,row,col,prmpt,atrib,fill,v,
fwidth,ndec,low,high,ubuff,hlpmsg,errmsg)
int fun - function code (SET || XEQ)
(WIFORM) frm - form pointer (actual || NFRM)
int fld - field # in form (actual || NFLD)
(WINDOWPTR) wn - window pointer
int row - row in window where data input begins
int col - col in window where data input begins
(char *) prmpt - field prompt (call with NSTR for none)
unsigned atrib - field (not prompt) attributes
char fill - field fill character
(float *) v - pointer to float for return value
int fwidth - width of mask
(maximum # of digits is 20 with sign)
int ndec - # of decimal places
float low - minimum value (lower limit of value)
float high - maximum value (upper limit of value)
(char *) ubuff - pointer to char array of fwidth+2 bytes
(char *)hlpmsg - pointer to help message
(call with NSTR for none)
(char *)errmsg - pointer to err message
(call with NSTR for none)
RETURNS:
v via pointer.
NULL if error, else the non zero value returned from
wn_input.
"wns_escape" is set to TRUE if the ESCape key caused
wn_input to terminate. Set to FALSE otherwise.
CAUTIONS and ADDITIONAL NOTES:
fun - fun can only be SET for form setup, or XEQ for
immediate execution. When called with SET, valid
arguments for both "frm" and "fld" must be specified.
frm is the field pointer returned from wn_frmopn(), and
fld is the field sequence number in the form for this
field. When called with XEQ frm must be NFRM and fld
must be NFLD.
ubuff - Editing buffer. Must be of sufficient size to hold
the data as it is entered. Minimum size is fwidth+2.
Page: 116
The Window BOSS
wn_gfloat - continued.
On entry, the first byte of ubuff should be a null,
otherwise wn_input assumes there is valid data there
and will enter edit mode. This can be handy if there
is a need for prefilled, but editable fields. In
actual practice, wn_input uses this buffer for both
initial character data entry and subsequent editing.
On return, ubuff contains the actual data entered in
character format with fill and mask characters as
spaces (e.g. " -1240.20").
Calls wn_input to perform data entry.
Data must satisfy validation checks for function to return.
Calls wn_iemsg(errmsg) when validation fails.
Refer to "SAMPLE.C" for example(s) of usage.
WN_GFLOAT.C is provided in source form.
Page: 117
The Window BOSS
11.51. wn_gdouble -- input double in window
USAGE
wn_gdouble(fun,frm,fld,wn,row,col,prmpt,atrib,fill,v,
fwidth,ndec,low,high,ubuff,hlpmsg,errmsg)
int fun - function code (SET || XEQ)
(WIFORM) frm - form pointer (actual || NFRM)
int fld - field # in form (actual || NFLD)
(WINDOWPTR) wn - window pointer
int row - row in window where data input begins
int col - col in window where data input begins
(char *) prmpt - field prompt (call with NSTR for none)
unsigned atrib - field (not prompt) attributes
char fill - field fill character
(double *) v - pointer to float for return value
int fwidth - width of mask
(maximum # of digits is 20 with sign)
int ndec - # of decimal places
double low - minimum value (lower limit of value)
double high - maximum value (upper limit of value)
(char *) ubuff - pointer to char array of fwidth+2 bytes
(char *)hlpmsg - pointer to help message
(call with NSTR for none)
(char *)errmsg - pointer to err message
(call with NSTR for none)
RETURNS:
v via pointer.
NULL if error, else the non zero value returned from
wn_input.
"wns_escape" is set to TRUE if the ESCape key caused
wn_input to terminate. Set to FALSE otherwise.
CAUTIONS AND ADDITIONAL NOTES:
fun - fun can only be SET for form setup, or XEQ for
immediate execution. When called with SET, valid
arguments for both "frm" and "fld" must be specified.
frm is the field pointer returned from wn_frmopn(),
and fld is the field sequence number in the form for
this field. When called with XEQ frm must be NFRM and
fld must be NFLD.
ubuff - Editing buffer. Must be of sufficient size to hold
the data as it is entered. Minimum size is fwidth+2.
Page: 118
The Window BOSS
wn_gdouble - continued.
On entry, the first byte of ubuff should be a null,
otherwise wn_input assumes there is valid data there
and will enter edit mode. This can be handy if there
is a need for prefilled, but editable fields. In
actual practice, wn_input uses this buffer for both
initial character data entry and subsequent editing.
On return, ubuff contains the actual data entered in
character format with fill and mask characters as
spaces (e.g. " -1240.20").
Calls wn_input to perform data entry.
Data must satisfy validation checks for function to
return.
Calls wn_iemsg(errmsg) when validation fails.
Page: 119
The Window BOSS
11.52. wn_gbool -- input logical in window
USAGE
wn_gbool(fun,frm,fld,wn,row,col,prmpt,atrib,fill,value,
ubuff,hlpmsg,errmsg)
int fun - function code (SET || XEQ)
(WIFORM) frm - form pointer (actual || NFRM)
int fld - field # in form (actual || NFLD)
(WINDOWPTR) wn - window pointer
int row - row in window where data input begins
int col - col in window where data input begins
(char *) prmpt - field prompt (call with NSTR for none)
unsigned atrib - field (not prompt) attributes
char fill - field fill character
(int *) value - pointer to int for value (0=FALSE, 1=TRUE)
(char *) ubuff - pointer to char array of 3 bytes
(char *)hlpmsg - pointer to help message
(call with NSTR for none)
(char *)errmsg - pointer to err message
(call with NSTR for none)
RETURNS:
value via pointer (0=FALSE, 1=TRUE)
NULL if error, else the non zero value returned from
wn_input.
"wns_escape" is set to TRUE if the ESCape key caused
wn_input to terminate. Set to FALSE otherwise.
CAUTIONS and ADDITIONAL NOTES:
fun - fun can only be SET for form setup, or XEQ for
immediate execution. When called with SET, valid
arguments for both "frm" and "fld" must be specified.
frm is the field pointer returned from wn_frmopn(), and
fld is the field sequence number in the form for this
field. When called with XEQ frm must be NFRM and fld
must be NFLD.
ubuff - Editing buffer. Must be of sufficient size to hold
the data as it is entered. Minimum size is 3 bytes.f
On entry, the first byte of ubuff should be a null,
otherwise wn_input assumes there is valid data there
and will enter edit mode. This can be handy if there
is a need for prefilled, but editable fields. In
actual practice, wn_input uses this buffer for both
initial character data entry and subsequent editing.
Page: 120
The Window BOSS
wn_gbool - continued.
On return, ubuff contains the actual data entered in
character format with fill and mask characters as
spaces (e.g. "T").
Calls wn_input to perform data entry.
User MUST enter T,F,Y, or N.
Data must satisfy validation checks for function to return.
Calls wn_iemsg(errmsg) when validation fails.
Refer to "SAMPLE.C" for example(s) of usage.
Page: 121
The Window BOSS
11.53. wn_dtext -- display text on input form
USAGE
wn_dtext(fun,frm,fld,wn,row,col,prmpt)
int fun - function code (SET || XEQ)
(WIFORM) frm - form pointer (actual || NFRM)
int fld - field # in form (actual || NFLD)
(WINDOWPTR) wn - window pointer
int row - row in window where data input begins
int col - col in window where data input begins
(char *) prmpt - field prompt (call with NSTR for none)
RETURNS:
TRUE if fun==SET
or
Normal return value of wn_puts if fun==XEQ
CAUTIONS and ADDITIONAL NOTES:
fun - fun can only be SET for form setup, or XEQ for
immediate execution. When called with SET, valid
arguments for both "frm" and "fld" must be specified.
frm is the field pointer returned from wn_frmopn(), and
fld is the field sequence number in the form for this
field. When called with XEQ frm must be NFRM and fld
must be NFLD.
Refer to "SAMPLE.C" for example(s) of usage.
Page: 122
The Window BOSS
11.54. wn_iemsg -- display input error message
USAGE
wn_iemsg(msg)
(char *) msg - pointer to message to be displayed.
RETURNS:
NULL if error, else TRUE
CAUTIONS and ADDITIONAL NOTES:
This routine should be modified or replaced with code to suit
your application's specific needs. It hooks to wn_g????
such that whenever the field validation fails wn_g???? calls
wn_iemsg to display an error message for the field in
question. The hooks in wn_g????? are of the form:
if(validation failed) wn_iemsg(msg);
This routine displays a single line of text on the 25th line
and waits for a key to be struck before returning to accept
new data for the field in question.
The error message can be a maximum of 80 characters, and must
not contain any formatting directives (\n\t...).
Some wn_g???? functions (i.e. wn_gtext) have no provision to
validate data and therefore never attempt to call this
routine.
WN_IEMSG.C is provided in source form.
Page: 123
The Window BOSS
11.55. wn_ihmsg -- display input help message
USAGE
wn_ihmsg(msg)
(char *) msg - pointer to message to be displayed.
RETURNS:
NULL if error, else TRUE
CAUTIONS and ADDITIONAL NOTES:
This routine should be modified or replaced with code to suit
your application's specific needs. It hooks to wn_input
such that whenever the HELP key is pressed wn_input calls
wn_ihmsg to display a help message for the field in question.
The hooks in wn_input are of the form:
if(key_struck == HELP) wn_ihmsg(msg);
The F1 key is the default HELP key. This can be changed by
calling the wns_shkey() function.
This routine displays a single line of help on the 25th line
and waits for a key to be struck before returning.
The help message can be a maximum of 80 characters, and must
not contain any formatting directives (\n\t...).
WN_IHMSG is provided in source form.
11.56. wn_shkey -- set HELP key code
USAGE
wn_shkey(code)
unsigned int code;
code - scancode of the key to be defined as the HELP key.
F1 is the default HELP key. The scancode for F1 is 0x3B00.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES:
SCANCODE.C can be used to determine the scancodes for any
and all keys.
Page: 124
The Window BOSS
11.57. wn_popup -- display and act on popup menu
USAGE
wn_popup(page,row,col,width,height,atrib,batrib,mx,cflag)
int page, row, col, width, height, cflag;
unsigned int atrib, batrib;
struct pmenu *mx;
page - video page (Always 0)
row - row of origin
col - col of origin
width - width (inside dimension)
height - height (inside dimension)
atrib - window attribute
batrib - border attribute
mx - pointer to menu structure
cflag - close on return flag (FALSE to leave open)
The pmenu structure is defined in "windows.h" (replicated here
for clarity) and must be initialized prior to calling wn_popup.
struct mitem { /* POPUP menu item template */
int r; /* row */
int c; /* col */
char *t; /* text */
int rv; /* return value */
};
struct pmenu { /* POPUP menu structure */
WINDOWPTR wpsave; /* place to hold window id */
int winopn; /* leave window open flag */
int lndx; /* last index */
int fm; /* first menu item index */
int lm; /* last menu item index */
struct mitem scrn[WN_MXROWS*4]; /* a bunch of menu items */
}; /* NOTE RELATIVE LIMIT */
RETURNS:
The return code for the menu item selected or 99 if ESCape is
pressed.
CAUTIONS and ADDITIONAL NOTES:
None.
SEE ALSO
Popup menu basics.
Page: 125
The Window BOSS
11.58. wn_qpopup -- display quick popup window
USAGE
WINDOPTR wn_qpopup(page,row,col,width,height,atrib,batrib,mx)
int page, row, col, width, height, cflag;
unsigned int atrib, batrib;
struct pmenu *mx;
page - video page (Always 0)
row - row of origin (0 to WN_MAXROWS)
col - col of origin (0 to WN_MAXCOLS)
width - width (inside dimension)
height - height (inside dimension)
atrib - window attribute
batrib - border attribute
mx - pointer to menu structure
The pmenu structure is defined in "windows.h" (replicated here
for clarity) and must be initialized prior to calling wn_popup.
struct mitem { /* POPUP menu item template */
int r; /* row */
int c; /* col */
char *t; /* text */
int rv; /* return value */
};
struct pmenu { /* POPUP menu structure */
WINDOWPTR wpsave; /* place to hold window id */
int winopn; /* leave window open flag */
int lndx; /* last index */
int fm; /* first menu item index */
int lm; /* last menu item index */
struct mitem scrn[WN_MXROWS*4]; /* a bunch of menu items */
}; /* NOTE RELATIVE LIMIT */
RETURNS:
A WINDOWPTR to the popup window that has been displayed.
CAUTIONS and ADDITIONAL NOTES:
None.
SEE ALSO
Popup menu basics.
Page: 126
The Window BOSS
11.59. wh_hlinit -- initialize help system
USAGE
wn_hlinit(row, col, width, height, atrib, batrib, file)
int page, row, col, width, height, atrib, batrib;
char *file;
row - row of upper left hand corner of the window
col - column of upper left hand corner of the window
width - INSIDE dimension (max value is 78 for a 80 column
wide display)
height- INSIDE dimension (max value is 23 for a 25 row
high display)
atrib - attribute to be used IN the window
batrib- attribute to be used for the border
file - help file name (assumes ".HLP" extension)
Unless you modify the code in WN_HELP.C, wn_hlint calls should
always take the form of:
wn_hlinit(0,0,78,23,(BLUE<<4|WHITE),(BLUE<<4|WHITE),file);
| | |
+--------------\/-----------------------+ |
Use as is |
|
YOUR ".HLP" file's name -----+
Unless you modify the code in WN_HELP.C, "HLP" files should be
formatted according to the following convention:
%key_word% - max 25 characters, ALWAYS begin in position 1,
always enclosed within percent signs.
text - starts in column 3, ends in 76, contains a
maximum of 20 lines per screen. Text,
including any leading and/or trailing blank
lines and/or spaces is always immediately
preceded by a key word or the .cp command.
(Use blank lines at the top to center
vertically. Use spaces at the left of each
line to center horizontally.)
.cp - starts in column 1. Command that signals end
of screen in a series of 2 or more help
screens. Precedes or succeeds text.
*END* - starts in column 1. Command that signals end
of help. Succeeds text.
Page: 127
The Window BOSS
wn_hlinit - continued.
A typical HLP file would look something like.
00000...............................................77778
12345...............................................67890
%subject 1%
Title of Screen 1 - Subject 1
This is a sample help screen for screen number 1
of a multi screen message.
.cp
Title of Screen 2 - Subject 1
This the second screen of a multi screen help
message for subject1.
*END*
%subject 2%
Title of Screen 1 - Subject 2
This is a sample help screen for a single screen
help message.
*END*
Later, when wn_help is called, text will be sequentially
displayed a screen at a time from the subject keyword through
any number of .cp delimited screens through and including the
screen delimited by *END*. The system allows for forward and
reverse display via the PgUp and PgDn keys. The .cp signals
the end of a single screen in a series of 2 or more screens.
When .cp is detected, the message "Esc to quit help, PgUp for
previous screen, any other key to continue..." will be
displayed. When *END* is detected, the message "End of help,
PgUp for previous screen, any other key to continue..." is
displayed.
RETURNS:
TRUE if all is well.
FALSE the help file (.HLP) or its index file (.NDX) could not
be found or open. A FALSE return can also be caused by a lack
of free memory for the memory resident file index or the file
buffers themselves.
Page: 128
The Window BOSS
wn_hlinit - continued.
CAUTIONS and ADDITIONAL NOTES:
wn_hlinit requires both the ".HLP" and ".NDX" files to be
present when called. "NDX" files are produced by GENINDEX. The
source to GENINDEX can be found in GENINDEX.C.
As implemented, the help system is configured to provide a full
screen text message, subject keys are limited to 25 characters,
and there is a limit of 255 subject keys per file. This can be
changed by modifying the functions found in "wn_help.c" THERE
IS A DIRECT CORRELATION BETWEEN THE PARAMETERS USED TO
INITIALIZE THE HELP SYSTEM AND THE LAYOUT OF THE ASCII TEXT
FILE READ BY THE GENINDEX PROGRAM. If you modify the code be
sure to modify the location and text of the messages to be
displayed when .cp and/or *END* are dectected.
SEE ALSO
Help system basics, wn_help
Page: 129
The Window BOSS
11.60. wn_help -- display help message
USAGE
wn_help(key_word)
char *key_word;
char *key_word - valid keyword contained in help file named
in the call to wn_hlinit.
The text associated with the key_word will be sequentially
displayed a screen at a time from the subject keyword through
any number of .cp delimited screens through and including the
screen delimited by *END*. The system allows for forward and
reverse display via the PgUp and PgDn keys. The .cp signals
the end of a single screen in a series of 2 or more screens.
When .cp is detected, the message "Esc to quit help, PgUp for
previous screen, any other key to continue..." will be
displayed. When *END* is detected, the message "End of help,
PgUp for previous screen, any other key to continue..." is
displayed.
RETURNS:
TRUE if all is well.
FALSE if system has not been initialzied, the . HLP file can
not be found, or the keyword passed could not be found in the
memory resident index.
CAUTIONS and ADDITIONAL NOTES:
None.
SEE ALSO
wn_hlinit
Page: 130
The Window BOSS
11.61. wn_sleftj -- (string) left justify
USAGE
wn_sleftj(str)
(char *) str - string to left justify
RETURNS:
Pointer to str.
CAUTIONS and ADDITIONAL NOTES:
The string str is left justified in place.
This funtion should not be used with literal character
strings (e.g. wn_sleft(" left justify this");).
Leading white space is converted to trailing white space.
11.62. wn_srightj -- (string) right justify
USAGE
wn_srightj(str)
(char *) str - string to right justify.
RETURNS:
Pointer to str.
CAUTIONS and ADDITIONAL NOTES:
The string str is right justified in place.
This funtion should not be used with literal character
strings (e.g. wn_srightj("right justify this ");).
Trailing white space is converted to leading white space.
Page: 131
The Window BOSS
11.63. wn_scenter -- (string) center
USAGE
wn_scenter(sr,tr,w)
(char *) sr - the string to center - source
(char *) tr - the centered string - target
tr contains the results of centering
int w - desired width of centered string
RETURNS:
Pointer to tr.
CAUTIONS and ADDITIONAL NOTES:
tr must be a pointer to a character array of at least
w+1 in size.
The source string pointed to by sr is not altered in any
way.
Both leading and trailing white space of the source string
are considered part of the string to be centered.
Desired Width (W)
|------------------------------------------|
source "this is a simple example"
target| this is a simple example |
source " this is an example toooo"
target| this is an example toooo |
This fuction is intended to deal with strings that do not
have leading or trailing white space. WN_SDELSPC can be
called to prepare the string for centering.
Page: 132
The Window BOSS
11.64. wn_sdelspc -- (string) delete leading/trailing spaces
USAGE
wn_sdelspc(str, code)
char *str - string to be treated
int code - operation code:
1 = delete leading
2 = delete trailing
3 = delete both
RETURNS:
Pointer to str.
CAUTIONS and ADDITIONAL NOTES:
All operations are performed in place.
This funtion should not be used with literal character
strings (e.g. wn_sdelspc(" mumble fratz ", 3);).
11.65. wn_strndx -- (string) return index of s2 in s1
USAGE
wn_strndx(s1,s2,off)
(char *) s1 - pointer to string s1
(char *) s2 - pointer to string s2
int off - s1 offset for search start
RETURNS:
The index (a.k.a. subscript or offset) of where s2 begins in
s1, or (-1) if s2 could not be found in s1.
CAUTIONS and ADDITIONAL NOTES:
A value for "off" must be provided.
Page: 133
The Window BOSS
11.66. mo_reset -- reset/init mouse
USAGE
ms = (MOUSEPTR) mo_reset()
MOUSEPTR ms;
ms - mouse handle
mo_reset() must be the 1st mouse function called.
Low level and applications level interface function.
RETURNS
mo = mouse handle or MOLPTR (null) if error
CAUTIONS and ADDITIONAL NOTES
Any program that uses a mouse must first initialize it in
order to avoid dealing with the mouse in an unknown state.
This function clears the mouse status to a "power on" state,
places the mouse's cursor in the center of the screen
(although hidden) and sets the mouse's active region to the
full screen.
Requires "windows.h" to be "#include"d.
MOUSEPTR is defined in "windows.h"
Example:
#include "windows.h"
main()
{
MOUSEPTR ms;
ms=mo_reset(); /* init mouse */
if(ms) {
..... /* do other things */
exit(0); /* finito */
}
else {
... no mouse
}
}
/* End */
Page: 134
The Window BOSS
11.67. mo_show -- show mouse
USAGE
mo_show(ms)
MOUSEPTR ms;
ms - mouse handle
Display (show, unhide) the mouse cursor.
Low level and applications level interface function.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
Example:
#include "windows.h"
main()
{
MOUSEPTR ms;
ms=mo_reset(); /* init mouse */
if(ms) {
mo_show(ms); /* show mouse */
..... /* do other things */
exit(0); /* finito */
}
else {
... no mouse
}
}
/* End */
Failure to call mo_show() will cause the mouse to never be
displayed. mo_show() is usually called after mo_reset().
Page: 135
The Window BOSS
11.68. mo_hide -- hide mouse
USAGE
mo_hide(ms)
MOUSEPTR ms;
ms - mouse handle
Hide (unshow, make invisible) the mouse cursor.
Low level and applications level interface function.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
The only way to display the mouse cursor after it is hidden
is by calling mo_show().
Example:
#include "windows.h"
main()
{
MOUSEPTR ms;
ms=mo_reset(); /* init mouse */
if(ms) {
mo_show(ms); /* show mouse */
v_getch(); /* wait for key hit */
mo_hide(ms); /* hide mouse */
exit(0); /* finito */
}
else {
... no mouse
}
}
/* End */
Page: 136
The Window BOSS
11.69. mo_pos -- get mouse pixel position & status
USAGE
mo_pos(ms)
MOUSEPTR ms;
ms - mouse handle
This function updates the mouse control block with current
mouse status information - physical location and button
status. This information is provided in real time and in
the mouse's 640 x 200 pixel array corrdinate system.
Low level interface function.
RETURNS
Nothing.
Updates - Members of the mouse control block:
ms->bstat - bit 0 set if left button is CURRENTLY down
bit 1 set if right button is CURRENTLY down
bit 2 set if center button is CURRENTLY down
ms->row - mouse pixel row location
ms->col - mouse pixel col location
CAUTIONS and ADDITIONAL NOTES
All information is reported in real time. If the mouse is
in the process of being moved, the information returned may
not be indicative of the final destination.
This funtion is typically used in graphics mode (which The
Window BOSS does not support). It is handy for "etch-a-
sketch" type pixel drawing programs.
Making infrequent calls to this routine can cause your
program to miss button clicks.
Text (80x25) row and column coordinates can be determined by
dividing m->row and m->col by 8.
The recommended way to obtain accurate information in a more
useful format is by using mo_wait in conjunction with
mo_rcpos.
Also see "mo_rcpos", "mo_wait".
Page: 137
The Window BOSS
11.70. mo_move -- move mouse pixel cursor
USAGE
mo_move(ms, row, col)
MOUSEPTR ms;
int row,col;
ms - mouse handle
row - new pixel row value
col - new pixel col value
This function moves the mouse to a new physical location in
the mouse's 640 x 200 pixel array coordinate system.
Low level interface function.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
Pixel row and column coordinates can be determined by
multiplying the text (80x25) coordinates by 8.
Also see "mo_locate".
Page: 138
The Window BOSS
11.71. mo_pbinfo -- get pressed mouse botton status
USAGE
mo_pbinfo(ms,button)
MOUSEPTR ms;
int button;
ms - mouse handle
button - button of interest (MO_LEFT or MO_RIGHT)
Low level interface function.
RETURNS
Nothing.
Updates - Members of the mouse control block:
ms->bstat - bit 0 set if left button is CURRENTLY down
bit 1 set if right button is CURRENTLY down
bit 2 set if center button is CURRENTLY down
ms->nclick - number of times the requseted button has
been pressed since last call.
ms->row - mouse pixel row location of last press
ms->col - mouse pixel col location of last press
CAUTIONS and ADDITIONAL NOTES
The mouse device driver is a pretty smart critter. It keeps
track of a number of things, one of them being the number of
times a particular button has been pressed or released since
the last time someone has asked about it. This function
returns pressed button information about a specific button
(MO_LEFT or MO_RIGHT), and it also returns the real time
button status in the same format as mo_pos().
The ms->row and ms->column locations in the mouse control
block are from the last press of the specified button.
This function, like mo_pos, provides limited value for most
applications programs. A better choice is mo_rbinfo
(released button information and status), since the mouse
device driver waits for the user to RELEASE the specified
button before it updates the internal counters.
MO_LEFT and MO_RIGHT are defined in "windows.h"
Calling mo_pbinfo clears the mouse's pressed button history
counters.
Also see "mo_press", "mo_release", "mo_rbinfo"
Page: 139
The Window BOSS
11.72. mo_rbinfo -- get released mouse button status
mo_rbinfo(ms,button)
MOUSEPTR ms;
int button;
ms - mouse handle
button - button of interest (MO_LEFT or MO_RIGHT)
Low level interface function.
RETURNS
Nothing.
Updates - Members of the mouse control block:
ms->bstat - bit 0 set if left has been released
bit 1 set if right button has been released
bit 2 set if center button " " "
ms->nclick - number of times the requseted button has
been pressed and released since last call.
ms->row - mouse pixel row location of last release
ms->col - mouse pixel col location of last release
CAUTIONS and ADDITIONAL NOTES
The mouse device driver is a pretty smart critter. It keeps
track of a number of things, one of them being the number of
times a particular button has been pressed or released since
the last time someone has asked about it. This function
returns released button information about a specific button
(MO_LEFT or MO_RIGHT), and it also returns the real time
button status in the same format as mo_pos().
The ms->row and ms->column locations in the mouse control
block are from the last button release of the specified
button.
The mouse device driver waits for the user to RELEASE the
specified button before it updates the internal counters.
MO_LEFT and MO_RIGHT are defined in "windows.h"
Calling mo_rbinfo clears the mouse's pressed button history
counters.
Also see "mo_release", "mo_press", "mo_pbinfo"
Page: 140
The Window BOSS
11.73. mo_clim -- set mouse min/max pixel column limits
USAGE
mo_clim(ms,min,max)
MOUSEPTR ms;
int min, mix;
ms - mouse handle
min - column minimum in pixels (0 to 639)
max - column maximum in pixels (0 to 639)
mo_clim and mo_rlim limit the operational area of the mouse.
Together they define the mouse's hot area, or if you prefer,
they establish a fence/cage around the mouse.
Low level interface function.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
min and max are not range checked, 0 is on the left.
Also see "mo_reigon"
11.74. mo_rlim -- set mouse min/max pixel row limits
USAGE
mo_clim(ms,min,max)
MOUSEPTR ms;
int min, mix;
ms - mouse handle
min - row minimum in pixels (0 to 199)
max - row maximum in pixels (0 to 199)
mo_clim and mo_rlim limit the operational area of the mouse.
Together they define the mouse's hot area, or if you prefer,
they establish a fence/cage around the mouse.
Low level interface function.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
min and max are not range checked, 0 is at the top.
Page: 141
The Window BOSS
11.75. mo_sgcursor -- set mouse graphics cursor
USAGE
mo_sgcursor(ms, hhot, vhot, seg, off)
MOUSEPTR ms;
int hhot, vhot;
unsigned int seg, off;
ms - mouse handle
hhot, vhot - X & Y relative coordinates of hot spot
seg, off - segment and offset of mask set
Low level interface function.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
This is an unsupported function that is useful in graphics
mode only.
This function is not to be used in conjunction with The
Window BOSS or Data Clerk.
Refer to the Microsoft and/or Logitech API manuals for a
complete description of mouse function 9.
Use "mo_scursor" or "mo_setptr" to set the mouse cursor.
Page: 142
The Window BOSS
11.76. mo_scursor -- set mouse cursor
USAGE
mo_scursor(ms, type, start, stop)
MOUSEPTR ms;
int type, start, stop;
ms - mouse pointer
type - cursor type:
MO_HDW for hardware
MO_SFT for software
start - start scan line
stop - stop scan line
When using a mouse, you can choose between two types of text
cursors, which are hardware or software. The hardware
(MO_HDW) cursor puts the video adapters text cursor under
control of the mouse. This results in a single cursor
appearing on the screen for both the mouse and text. The
software cursor (MO_SFT) allows two cursors to appear on the
screen, the normal text cursor and a mouse cursor that can
take on a user defined shape and attribute. The software
cursor is the default and is a simple full-cell inverse
video cursor.
Using the hardware cursor type MO_HDW:
start - start scan line (usually 0)
stop - stop scan line:
monochrome max = 12
non mon max = 7
Using the software cursor type MO_SFT:
Option 1 (user defined):
start - 0x00
stop - display attributes in upper 8 bits.
ASCII character to be used as cursor in lower 8
bits.
For example, to set the software cursor to a white
happy face on a black background:
mo_scursor(ms, MO_SFT, 0x00, 0x0703);
continued...
Page: 143
The Window BOSS
mo_scursor - continued.
Option 2 (see through rectangle):
start - 0x77ff
stop - 0x00
For example, to set the software cursor to a see
through block:
mo_scursor(ms, MO_SOFT, 0x77ff, 7700);
Low level interface function.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
See also "mo_setptr".
Page: 144
The Window BOSS
11.77. mo_motion -- get mouse motion counters
USAGE
mo_motion(ms)
MOUSEPTR ms;
ms - mouse handle
Low level interface function.
RETURNS
Nothing.
Updates - Members of the mouse control block:
ms->vmove - vertical move counter since last call
ms->hmove - horizontal move counter since last call
CAUTIONS and ADDITIONAL NOTES
The mouse motion counters are reset after each call.
Page: 145
The Window BOSS
11.78. mo_task -- define mouse event handler
USAGE
mo_task(m, mask, seg, off)
WINDOWPTR m;
unsigned int mask, seg, off;
m - mouse handle
mask - event mask
BIT EVENT
0 Mouse cursor moved
1 Left Button pressed
2 Left button released
3 Right button pressed
4 Right button released
5 Middle button pressed
6 Middle button released
seg - segment address of handler routine
off - offset portion of handler routine address
This function, if properly implemented, can keep your code
free of frequent mouse checks. The basic notion is to
"attach" a function in your program to the mouse device
driver. This function would be invoked whenever any one of
the above events took place. Your function would then
execute at interrupt level. There are a few shortcomings,
however, your function can not perform any I/O, make any
calls to DOS or call any of the ROM BIOS routines. What can
it do? Actually not much other than record the fact than an
event took place and dismiss the interupt. Your program can
then process the event at its convenience.
The difficulty with using this function is due to the fact
that your function MUST look like an interupt service
routine in both the way it beings and finishes executing.
This form of code generation is something most "C" compilers
are not very good at, and as a result most of these handler
routines have to be written in assembly language. This
function is provided as a convenience to those who are
familar with writing these types of programs - it is not
supported by Star Guidance.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
This is an unsupported function.
Refer to the Microsoft and/or Logitech API manuals for a
complete description of mouse function 12.
Page: 146
The Window BOSS
11.79. mo_lpon -- mouse light pen emulation on
11.80. mo_lpoff -- mouse light pen emulation off
USAGE
mo_lpon(ms)
MOUSEPTR ms;
mo_lpoff(ms)
MOUSEPTR ms;
ms - mouse handle
These functions allow software that exepects to find a light
pen to respond (or not to respond) to the mouse as if it
were a light pen. By default, light pen emluation is
enabled - mo_reset() automatically turns on light pen
emulation.
Low level and applications level interface function.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
None.
11.81. mo_ratio -- set motion to pixel ratio
USAGE
mo_ratio(ms)
MOUSEPTR ms;
ms - mouse handle
Set the motion to pixel ratio (graphics mode).
Low level interface function.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
This is an unsupported function.
Refer to the Microsoft and/or Logitech API manuals for a
complete description of mouse function 15.
Page: 147
The Window BOSS
11.82. mo_rcpos -- return current position of mouse
USAGE
mo_rcpos(ms, status, row, col)
MOUSEPTR ms;
int *status, *row, *col;
ms - mouse handle
*status - pointer to int to receive mouse status
bit 0 set if left button is CURRENTLY down
bit 1 set if right button is CURRENTLY down
bit 2 set if center button is CURRENTLY down
*row - pointer to int to receive position
of mouse row (0-25)
*col - pointer to int to receive position
of mouse column (0-79)
Applications level interface function.
RETURNS
Nothing.
Updates - Members of the mouse control block:
ms->bstat - bit 0 set if left button is CURRENTLY down
bit 1 set if right button is CURRENTLY down
bit 2 set if center button is CURRENTLY down
ms->row - mouse pixel row location
ms->col - mouse pixel col location
continued....
Page: 148
The Window BOSS
mo_rcpos - continued.
CAUTIONS and ADDITIONAL NOTES
Example:
#include "windows.h"
main()
{
MOUSEPTR ms;
int st, row, col;
ms=mo_reset(); /* init mouse */
if(ms) {
/* fetch status */
mo_rcpos(ms, &st, &row, &col);
mo_show(ms); /* show mouse */
v_getch(); /* wait for key hit */
mo_hide(ms); /* hide mouse */
exit(0); /* finito */
}
else {
... no mouse
}
}
/* End */
Note the use of pointers.
All information is reported in real time. If the mouse is
in the process of being moved the information returned may
not be indicative of the final destination.
Making infrequent calls to this routine can cause your
program to miss button clicks.
The recommended way to obtain accurate information is by
using mo_wait in conjunction with mo_rcpos.
See also mo_pos(), mo_wait()
Page: 149
The Window BOSS
11.83. mo_locate -- locate (position) mouse cursor
USAGE
mo_locate(ms, row, col)
MOUSEPTR ms;
int row, col;
ms - mouse handle
row - destination row (0-24)
col - destination column (0-79)
mo_locate positions the mouse to the row and column
specified.
Applications level interface function.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
Example:
#include "windows.h"
main()
{
MOUSEPTR ms;
int st, row, col;
ms=mo_reset(); /* init mouse */
if(ms) {
/* fetch status */
mo_rcpos(ms, &st, &row, &col);
if(row != 0) /* home the mouse ?? */
mo_locate(ms, 0, 0);
mo_show(ms); /* show mouse */
v_getch(); /* wait for key hit */
mo_hide(ms); /* hide mouse */
exit(0); /* finito */
}
else {
... no mouse
}
}
/* End */
Values are not range checked.
Page: 150
The Window BOSS
11.84. mo_press -- get mouse button press status
USAGE
mo_press(ms, button, status, nclick, row, col)
MOUSEPTR ms;
int button;
int *status, *nclick, *row, *col;
ms - mouse handle
button - button of interest (MO_LEFT or MO_RIGHT)
status - pointer to int to receive status information.
bit 0 set if left button is CURRENTLY down
bit 1 set if right button is CURRENTLY down
bit 2 set if center button is CURRENTLY down
nclick - pointer to int to receive number of times the
mouse button specified by button has been
pressed since last call. Zero indicates the
button has not been pressed since the last
call.
row - pointer to int to receive row (0-24) of last
button press.
col - pointer to int to receive column (0-79) of
last button press.
Applications level interface function.
RETURNS
Nothing.
Updates - Members of the mouse control block:
ms->bstat - bit 0 set if left button is CURRENTLY down
bit 1 set if right button is CURRENTLY down
bit 2 set if center button is CURRENTLY down
ms->nclick - number of times the requested button has been
pressed since last call.
ms->row - mouse pixel row location of last press
ms->col - mouse pixel col location of last press
continued....
Page: 151
The Window BOSS
mo_press - continued.
CAUTIONS and ADDITIONAL NOTES
Example:
#include "windows.h"
main()
{
MOUSEPTR ms;
int st, row, col;
ms=mo_reset(); /* init mouse */
if(ms) {
/* fetch status */
mo_rcpos(ms, &st, &row, &col);
if(row != 0) /* home the mouse ?? */
mo_locate(ms, 0, 0);
mo_show(ms); /* show mouse */
do { /* loop till press */
mo_wait(ms); /* let mouse settle */
mo_press(ms, MO_LEFT, &st, &nc, &row, &col);
} while(!nc);
mo_hide(ms); /* hide mouse */
exit(0); /* finito */
}
else {
... no mouse
}
}
/* End */
Note use of POINTERS.
MO_LEFT and MO_RIGHT are defined in "windows.h"
Calling mo_press clears the mouse's pressed button history
counters.
Since mo_release waits for the mouse button to be released
before updating the device drivers internal tables, it is a
better choice for most applications.
Also see "mo_pbinfo"
Page: 152
The Window BOSS
11.85. mo_release -- get mouse button release status
USAGE
mo_release(ms, button, status, nclick, row, col)
MOUSEPTR ms;
int button;
int *status, *nclick, *row, *col;
ms - mouse handle
button - button of interest (MO_LEFT or MO_RIGHT)
status - pointer to int to receive status information.
bit 0 set if left button has been pressed
and released.
bit 1 set if right button has been pressed
and released.
bit 2 set if center button has been pressed
and released.
nclick - pointer to int to receive number of times the
mouse button specified by button has been
pressed and released since last call. Zero
indicates the button has not been released
since the last call.
row - pointer to int to receive row (0-24) of last
button release.
col - pointer to int to receive column (0-79) of
last button release.
Applications level interface function.
RETURNS
Nothing.
Updates - Members of the mouse control block:
ms->bstat - bit 0 set if left has been released
bit 1 set if right button has been released
bit 2 set if center button " " "
ms->nclick - number of times the requested button has been
pressed and released since last call.
ms->row - mouse pixel row location of last release
ms->col - mouse pixel col location of last release
continued....
Page: 153
The Window BOSS
mo_release - continued.
CAUTIONS and ADDITIONAL NOTES
Example:
#include "windows.h"
main()
{
MOUSEPTR ms;
int st, nc, row, col;
ms=mo_reset(); /* init mouse */
if(ms) {
/* fetch status */
mo_rcpos(ms, &st, &row, &col);
if(row != 0) /* home the mouse ?? */
mo_locate(ms, 0, 0);
mo_show(ms); /* show mouse */
do { /* loop till release */
mo_wait(ms); /* let mouse settle */
mo_release(ms, MO_LEFT, &st, &nc, &row, &col);
} while(!nc);
mo_hide(ms); /* hide mouse */
exit(0); /* finito */
}
else {
... no mouse
}
}
/* End */
Note use of POINTERS.
The mouse device driver waits for the user to RELEASE the
specified button before it updates the internal counters.
MO_LEFT and MO_RIGHT are defined in "windows.h"
Calling mo_release clears the mouse's pressed button history
counters.
Also see "mo_rbinfo", "mo_pbinfo", "mo_press"
Page: 154
The Window BOSS
11.86. mo_reigon -- set mouse region
USAGE
mo_reigon(ms, row, col, width, height)
MOUSEPTR ms;
int row, col, width, height;
ms - mouse pointer
row - upper left hand corner row
col - upper left hand corner column
width - width of region (# of columns 1 to 80)
height - height of region (# of rows 1 to 25)
mo_reigon defines the boundaries of where the mouse may
move. Establishes a fence/cage around the mouse.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
Example:
#include "windows.h"
main()
{
MOUSEPTR ms;
int st, nc, row, col;
ms=mo_reset(); /* init mouse */
if(ms) {
/* fetch status */
mo_rcpos(ms, &st, &row, &col);
if(row != 0) /* home the mouse ?? */
mo_locate(ms, 0, 0);
mo_reigon(ms, 0, 0, 40, 12); /* 40x12 */
mo_show(ms); /* show mouse */
do { /* loop till release */
mo_wait(ms); /* let mouse settle */
mo_release(ms, MO_LEFT, &st, &nc, &row, &col);
} while(!nc);
mo_hide(ms); /* hide mouse */
exit(0); /* finito */
}
else {
... no mouse
}
}
/* End */
Page: 155
The Window BOSS
11.87. mo_setptr -- set mouse pointer and attributes
USAGE
mo_setptr(ms, tchar, atrib)
MOUSEPTR ms;
unsigned int tchar, atrib;
ms - mouse handle
tchar - character to be used as the mouse cursor, valid
range is 0 to 255 although a value of 0 makes
no sense at all!
atrib - attribute to be used. The attribute byte
contains the background specific data in the
upper 4 bits and the foreground specific data
in the lower 4 bits. Color and bit definitions
can be found in windows.h. You can use a
statement as follows to set atrib:
atrib = (bground << 4 | fground);
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
To set the mouse cursor to a white happy face on a backgound
use the following:
atrib = BLACK<<4 | WHITE;
mo_setptr(ms, 0x03, atrib);
Attributes are defined in windows.h.
Page: 156
The Window BOSS
11.88. mo_wait -- wait for mouse to settle
USAGE
mo_wait(ms)
MOUSEPTR ms;
ms - mouse handle.
Calling mo_wait causes your progam to pause until the mouse
has settled - completely stopped and with its buttons up and
no activity in progress.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
Example:
#include "windows.h"
main()
{
MOUSEPTR ms;
int st, nc, row, col;
unsigned atrib;
ms=mo_reset(); /* init mouse */
if(ms) { /* fetch status */
mo_rcpos(ms, &st, &row, &col);
if(row != 0) /* home the mouse ?? */
mo_locate(ms, 0, 0);
mo_reigon(ms, 0, 0, 40, 12); /* 40x12 */
atrib = BLACK<<4 | WHITE;
mo_setptr(ms, 0x03, atrib);
mo_show(ms); /* show mouse */
do { /* loop till release */
mo_wait(ms); /* let mouse settle */
mo_release(ms, MO_LEFT, &st, &nc, &row, &col);
} while(!nc);
mo_hide(ms); /* hide mouse */
exit(0); /* finito */
}
else {
... no mouse
}
}
/* End */
Page: 157
The Window BOSS
11.89. mo_nbutt -- get mouse button count
USAGE
(int) mo_nbutt(ms)
MOUSEPTR ms;
ms - mouse handle
RETURNS
Number of buttons on mouse.
CAUTIONS and ADDITIONAL NOTES
None.
Page: 158
The Window BOSS
11.90. _getca -- get character and attribute
USAGE
unsigned int _getca(page, row, col)
int page, row, col;
page - video page #
row - row value (0-24)
col - column value (0-79)
_getca fetches the character and attribute at the screen
coordinates defined by row and column. _getca is a general
purpose routine and can be used outside of the window
environment.
RETURNS
The character and attribute as an unsigned int. The attribute
is in the upper byte, the character is in the lower byte.
CAUTIONS and ADDITIONAL NOTES
None.
11.91. _putca -- put character and attribute
USAGE
_putca(page, atch, row, col);
int page, row, col;
unsigned atch;
page - video page #
atch - attribute and character
attribute in high order byte
character in low order byte
row - row position for character (0-24)
col - column position for character (0-79)
_putch is a general purpose routine that can be used outside of
the window environment.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
None.
Page: 159
The Window BOSS
11.92. _vidblt -- video block transfer
USAGE
_vidblt(sseg, soff, dseg, doff, n);
unsigned sseg, soff, dseg, doff;
int n;
sseg - source segment
soff - source offset
dseg - destination segment
doff - destination offset
n - number of bytes to BLT
_vidblt is similar to the lattice movedata() function except
that it waits for the video retrace signal before performing
the block transfer.
_vidblt is a general purpose function that can be used outside
of the window environment.
RETURNS
Nothing
CAUTIONS and ADDITIONAL NOTES
For use in color systems only.
_vidblt references wn_sbit.
11.93. v_spage -- set active display page
USAGE
v_spage(page)
int page;
page - video page to switch the display to
v_spage is a general purpose routine that can be used outside
of the window environment.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
Color card only.
Page: 160
The Window BOSS
11.94. v_cls -- clear entire video screen
USAGE
v_cls(atrib)
int atrib;
atrib - attribute to be used
v_cls clears the entire video screen to the specified attribute
and places the cursor in the upper left hand corner of the
screen.
v_cls is a general purpose routine that can be used outside of
the window environment.
Attributes are defined in windows.h.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
References Window BOSS globals defined in "windows.ext".
11.95. v_smode -- set video mode
USAGE
v_smode(mode)
int mode;
mode - mode to set the display to
v_smode is a general purpose routine which can be used outside
of the window environment.
Modes are defined in windows.h.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
None.
Page: 161
The Window BOSS
11.96. v_wca -- write character and attribute
USAGE
v_wca(page, char, atrib, count);
int page, char, atrib, count;
page - video page #
char - character to write
atrib - attribute to use
count - number of times to repeat
v_wca writes the character defined by char count times starting
at the current cursor location.
v_wca is a general purpose routine that can be used outside of
the window environment.
Attributes are defined in windows.h.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
None.
11.97. v_wtty -- write character TTY mode
USAGE
v_wtty(char);
int char;
char - character to write
v_wtty writes the character defined by char at the current cursor
location.
v_wtty is a general purpose routine that can be used outside of
the window environment.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
None.
Page: 162
The Window BOSS
11.98. v_locate -- locate (position) cursor
USAGE
v_locate(page, row, col);
int page, row, col;
page - video page #
row - row to position to
col - column to position to
v_locate positions the cursor to the absolute coordinates
specified by row and col on the specified page. The upper left
hand corner of the screen is (0,0).
v_locate is a general purpose routine that can be used outside
of the window environment.
Row and Col are range checked. You CAN position the cursor
slightly (25,80) off the screen.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
References Window BOSS globals defined in "windows.ext".
11.99. v_hidec -- hide cursor
USAGE
v_hidec();
The physical cursor is located off the screen.
This function does not affect any virtual cursor coordinates,
it simply hides the physical cursor from view.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
References Window BOSS globals defined in "windows.ext".
Page: 163
The Window BOSS
11.100. v_sctype -- set cursor type (style)
USAGE
v_sctype(type, start, end);
int type, start, end;
type - cursor style code
(0=hidden, 1=normal, 2=slow, 3=fast)
start - start scan line
end - end scan line
As an example, to set a slow flashing block style cursor invoke
this function with type=1, start=6, and end=12 (color card).
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
Color and Monochrome adapters only.
Not for use on the 3270 PC or Enhanced Graphics Adapters.
11.101. v_sapu -- scroll active display page up
USAGE
v_sapu(nl, rul, cul, rlr, clr, atrib);
int nl, rul, cul, rlr, clr, atrib;
nl - number of lines to scroll
rul - row of upper left hand corner of scroll area
cul - column of upper left hand corner of scroll area
rlr - row of lower right corner of scroll area
clr - column of lower right corner of scroll area
atrib - attribute to be used for blanking
A value of 0 for nl scrolls (blanks) the entire area. To clear
the entire video screen use v_sapu(0, 0, 0, 24, 79, NORMAL).
v_sapu is a general purpose routine that can be used outside of
the window environment.
Attributes are defined in windows.h.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
None.
Page: 164
The Window BOSS
11.102. v_sapd -- scroll active display page down
USAGE
v_sapd(nl, rul, cul, rlr, clr, atrib);
int nl, rul, cul, rlr, clr, atrib;
nl - number of lines to scroll
rul - row of upper left hand corner of scroll area
cul - column of upper left hand corner of scroll area
rlr - row of lower right corner of scroll area
clr - column of lower right corner of scroll area
atrib - attribute to be used for blanking
v_sapd is a general purpose routine that can be used outside of
the window environment.
A value of 0 for nl scrolls (blanks) the entire area. To clear
the entire video screen use v_sapd(0, 0, 0, 24, 79, NORMAL).
Attributes are defined in windows.h.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
None.
11.103. v_rcpos -- return current cursor position
USAGE
v_rcpos(page, row, col);
int page;
int *row, *col; /* POINTERS */
int page - video page #
int *row - pointer to int to receive row value
int *col - pointer to int to receive column value
v_rcpos is a general purpose routine that can be used outside
of the window environment.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
None.
Page: 165
The Window BOSS
11.104. v_rcvs -- return current video state
USAGE
v_rcvs(page, vm, cols);
int *page, *vm, *cols; /* POINTERS */
int *page - pointer to int to receive current video page #
int *vm - pointer to int to receive current video mode
int *cols - pointer to int to receive current screen width
v_rcvs is a general purpose routine that can be used outside of
the window environment.
Modes are defined in windows.h.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
None.
11.105. v_getch -- get keyboard character and scan code
USAGE
v_getch();
v_getch is a general purpose routine that can be used outside
of the window environment.
RETURNS
The character and scan code. The character is in the low order
byte, the scan code in the high order byte.
CAUTIONS and ADDITIONAL NOTES
v_getch waits for a key to be struck.
Page: 166
The Window BOSS
11.106. v_kstat -- get keyboard status
USAGE
v_kstat();
v_kstat is a general purpose routine that can be used outside
of the window environment.
RETURNS
TRUE if a character is available, FALSE if not.
CAUTIONS and ADDITIONAL NOTES
None.
11.107. v_kflush -- flush keyboard buffer
USAGE
v_kflush();
v_kflush clears the keyboard buffer of any pending input.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
None.
11.108. v_border -- set border color
USAGE
v_border(color)
int color;
Set overscan border to specified color.
RETURNS
Nothing.
CAUTIONS and ADDITIONAL NOTES
None.
Page: 167
The Window BOSS
12. Registration Form
Registration Form
Star Guidance Consulting
273 Windy Drive
Waterbury, Connecticut 06705
(203) 574-2449
Company Name: _______________________________________
Name: _______________________________________
Address: _______________________________________
_______________________________________
City, State, Zip: _______________________________________
Country: _______________________________________
Phone: _______________________________________
___ Library Source @ $55.00 USD $________._____
___ Shareware @ $20.00 USD $________._____
Shipping (Outside USA) $5.00 USD $________._____
Shipping (USA) $4.00 USD $________._____
Connecticut Sales Tax 8.0% $_______4.40___ *
(Connecticut residents only) *
TOTAL ------>________._____
MasterCard/Visa: ______________________ Exp Date: ____/____
(Circle one)
Printed Name: ______________________
(On Card)
Signature: ______________________ Date:____/____/____
(Of Card Holder)
All funds must be in US Dollars, Call for UPS COD (USA only),
Personal and Company Checks Accepted. All checks must be drawn
against a US Bank and payable in US Dollars.
Page: 168
The Window BOSS
A
ASMFILES.LZH, 31, 32
Aztec C, 54
AZTEC.LZH, 31, 32
azvlib.asm, 64
B
Bad Handle Exits, 46
Basics
Forms, 4
Mouse, 19
Windows, 4
BIOS, 48
Borland Turbo C, 50
Borland Turbo C++, 50
BOSS_DOC.LZH, 26, 27
BOSS_LB1.LZH, 26, 27, 29, 41
BOSS_LB2.LZH, 26, 27, 29
BOSS_LB3, 30
BOSS_LB3.LZH, 26, 27
BOSS_LB4, 30
BOSS_LB4.LZH, 26, 27
BOSS_LB5, 30
BOSS_LB5.LZH, 27
BOSS_SUP.LZH, 26, 27, 29, 41
Bulletin Board
Files, 26
Support, 26
C
C86.LZH, 31, 32
CFILES.LZH, 31, 33, 34
CSM.BAT, 42
D
Data Entry (Basics), 6
Datalight C, 53
DEMO.LZH, 31
DLC.LZH, 31, 36
dlvlib.asm, 64
DOC.LZH, 31
dos.mac, 64
E
Express C, 53
F
fields, 23
Fixup Errors, 45
FLASH, 48
forms, 23
closing, 23
Forms (Basics), 7
Page: 169
The Window BOSS
G
GENINDEX, 14, 15, 17, 129
Globals, 48
H
Help System
Basics, 14
Notes, 16, 17
I
INCLUDE Files, 42, 43
L
Lattice C, 53
LC3.LZH, 31, 35
LC6.LZH, 35
LDATA, 64
LHARC.DOC, 31
LHARC.EXE, 31
LHAR_DOC.LZH, 26
LPROG, 64
LWIN.LIB, 41
LZH Files, 26
M
macros.asm, 64
Microsoft C, 49
Microsoft Quick C, 49
mitem, 9
Mix Power C, 50
MIX.LZH, 31, 35
model.h, 64
Mouse (Basics), 19, 20, 21
mo_clim, 141
mo_hide, 136
mo_locate, 150
mo_lpoff, 147
mo_lpon, 147
mo_motion, 145
mo_move, 138
mo_nbutt, 158
mo_pbinfo, 139
mo_pos, 137
mo_press, 151
mo_ratio, 147
mo_rbinfo, 140
mo_rcpos, 148
mo_reigon, 155
mo_release, 153
mo_reset, 134
mo_rlim, 141
mo_scursor, 143
mo_setptr, 156
Page: 170
The Window BOSS
mo_sgcursor, 142
mo_show, 135
mo_task, 146
mo_wait, 157
MS5.LZH, 31, 37
MS6.LZH, 31, 37
MSQC.LZH, 31
MSQC20.LZH, 38
MSQC25.LZH, 38
msvlib.asm, 64
MWIN.MIX, 41
O
Offset Errors, 45
P
PAINT, 48
pcvlib.asm, 64
pmenu, 9, 10, 11
Popup Menus (Basics), 8
R
REVHST.LZH, 31
S
Shareware Diskette, 26
Source Diskette, 26
Support, 2
Support Services, 2
SWIN.LIB, 41
T
TC2.LZH, 31, 36
TCPP.LZH, 36
tcvlib.asm, 63
TopSpeed C, 51, 52, 60
TSC.LZH, 31, 40
Turbo C++, 63
U
Unresolved Externals, 45
V
video attributes, 22
vlib.asm, 64
v_border, 167
v_cls, 161
v_getch, 166
v_hidec, 163
v_kflush, 167
v_kstat, 167
v_locate, 163
v_rcpos, 165
v_rcvs, 166
Page: 171
The Window BOSS
v_sapd, 165
v_sapu, 164
v_sctype, 164
v_smode, 161
v_spage, 160
v_wca, 162
v_wtty, 162
W
Watcom C, 53
WATCOM.LZH, 31, 39
wcvlib.asm, 64
window handles, 22
window origin, 22
windows
closing, 23
overlapping, 24
tiled, 24
Windows (Basics), 5
WINDOWS.C, 48
WINDOWS.EXT, 42, 43, 48
WINDOWS.FN5, 42
WINDOWS.FN6, 42
WINDOWS.FNS, 42, 43
WINDOWS.FNT, 42
WINDOWS.FNZ, 42
WINDOWS.H, 42, 43
wns_escape, 48
wn_activate, 83
wn_boxset, 88
wn_close, 75
wn_clr, 83
wn_color, 84
wn_dborder, 89
wn_delrow, 82
wn_dma, 87
wn_dmaflg, 48
wn_dmode, 48, 69
wn_dtext, 122
wn_exit, 68
wn_fixcsr, 87
wn_frmcls, 97
wn_frmget, 96
wn_frmopn, 95
wn_gatext, 104
wn_gbool, 120
wn_gdate, 98
wn_gdouble, 118
wn_gets, 80
wn_gfloat, 116
wn_gint, 108
wn_glong, 112
wn_gltext, 104
wn_gphone, 102
Page: 172
The Window BOSS
wn_gpword, 106
wn_gtext, 104
wn_gtime, 100
wn_guint, 110
wn_gulong, 114
wn_gutext, 104
wn_help, 130
wn_hlinit, 14, 15, 127
wn_iemsg, 123
wn_ihmsg, 124
wn_init, 68
wn_input, 90
wn_insrow, 82
wn_locate, 77
wn_move, 76
wn_natrib, 88
wn_open, 70
wn_pmenu, 12
wn_popup, 8, 11, 125
wn_printf, 78
wn_psinit, 68
wn_putc, 79
wn_putca, 81
wn_puts, 79
wn_putsa, 81
wn_qpopup, 8, 12, 126
wn_restore, 76
wn_save, 75
wn_sbit, 48
wn_scenter, 132
wn_scroll, 48, 86
wn_sdelspc, 133
wn_shkey, 90, 91, 124
wn_sleftj, 131
wn_srightj, 131
wn_stitla, 74
wn_stitle, 73
wn_strndx, 133
wn_sync, 85
wn_titla, 72
wn_title, 72
wn_wrap, 85
X
XMWIN.LIB, 41
Z
Zortec C, 50
Zortech, 53
ZTC.LZH, 31, 39
Page: 173
The Window BOSS
_
_getca, 159
_putca, 159
_vidblt, 160
Page: 174